【问题标题】:Is the order of assignment in a list of initialized variables undefined? [duplicate]初始化变量列表中的赋值顺序是否未定义? [复制]
【发布时间】:2012-10-04 14:48:48
【问题描述】:

可能重复:
Is the comma in a variable list a sequence point?

如果我有以下代码,逗号是否充当正常序列点,或者行为未定义?

int i = 1, j = i;

我实际上并不打算使用它(我们的内部标准甚至禁止 int i, j)但我很好奇,事实证明它对谷歌来说非常棘手。

【问题讨论】:

    标签: c++ operator-precedence


    【解决方案1】:

    定义明确:

    8。声明符:[dcl.decl]

    3) 声明中的每个 init-declarator 都被单独分析,就好像它本身在声明中一样。

    注意事项:

    90) 具有多个声明符的声明通常等价于 相应的声明序列,每个声明都有一个 声明者。那是

    T D1, D2, ... Dn;

    通常等价于

    T D1; T D2; ... T Dn;

    其中 T 是一个 decl-specifier-seq 并且每个 Di 是一个 初始化声明器。

    为了完整性(因为注释说通常):

    当其中一个声明符引入的名称时发生异常 隐藏 dcl 说明符使用的类型名称,这样当相同的 dcl 说明符在随后的声明中使用,它们没有 含义相同,如struct S { ... }; S S, T; // 声明两个 struct Swhich is not equivalent tostruct S { ... } 的实例;小号 小号;英石; // 错误`

    【讨论】:

    • +1 这是一个疯狂的快速回答
    • 你是闪电侠,我的好先生!
    猜你喜欢
    • 2018-12-13
    • 2021-09-19
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2016-03-13
    • 1970-01-01
    相关资源
    最近更新 更多