假设我有一个与此对象相似的对象:

struct MenuDef
{
    int titleResourceId;

    struct MenuItemDef {
        char*               name;
        int                 value;
        SomeFunctionPtr     someFactory;
    } menuItems[10];
};

初始化如下:
const MenuDef m = {
    1,
    {
        {
            "zero",
            0,
            (SomeFunctionPtr) & MenuButton::factory,
        },
        {
            "one",
            1,
            (SomeFunctionPtr) & MenuButton::factory,
        },
        {
            "two",
            2,
            (SomeFunctionPtr) & MenuButton::factory,
        },
    }
};

可以安全地假定 m.menuItems[3].someFactory == 0 吗?

例如在这样的循环中:
for ( int i = 0; m.menuItems[i].someFactory != 0; ++i)

还是为了安全起见我必须插入最后一个元素来手动标记数组结尾吗?
...
        {
            "two",
            2,
            (SomeFunctionPtr) & MenuButton::factory,
        },
        {
            "",
            0,
            (SomeFunctionPtr) 0,
        },
...

最佳答案

我相信按照8.5.1 / 7的要求是安全的:



提醒一句 :

07-28 04:41