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

Har*_*Bro 1 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;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*eas 8

行为已定义,但结果可能与您的预期不符.

字段的顺序很重要.对于集合初始化每个值将初始化下一个成员中声明的顺序,所以在上面的代码,testChar将获得的值static_cast<char>(412.1),testDouble将得到的值52testInt将获得的值0(标准保证对于没有设置值将被初始化为所有成员0.