C ++ struct字段的顺序在聚合初始化中是否重要

时间:2013-08-22 18:22:58

标签: c++ visual-c++ c++11

以下代码是否产生定义的行为或未定义的行为。我在我的VC ++上试了一下,但我有一件事,但我很想知道这是不是只是说它或者它是否符合c ++标准。

#include <iostream>
class TestClass {
public:
    char testChar;
    double testDouble;
    int testInt;
};

int main(int argc, char** argv) {
    TestClass s = {412.1, 52};
    std::cout << s.testChar + s.testDouble + s.testInt << std::endl;
}

1 个答案:

答案 0 :(得分:8)

定义了行为,但结果可能不是您所期望的。

字段的顺序很重要。对于聚合初始化,每个值将按声明的顺序初始化下一个成员,因此在上面的代码中,testChar将获得值static_cast<char>(412.1)testDouble将获得值52testInt将获得值0(标准保证所有未提供值的成员将初始化为0.