1

以下代码是产生定义的行为还是未定义的行为。我在我的 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;
}
4

1 回答 1

8

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

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

于 2013-08-22T18:27:31.670 回答