以下代码是否产生定义的行为或未定义的行为。我在我的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;
}
答案 0 :(得分:8)
定义了行为,但结果可能不是您所期望的。
字段的顺序很重要。对于聚合初始化,每个值将按声明的顺序初始化下一个成员,因此在上面的代码中,testChar
将获得值static_cast<char>(412.1)
,testDouble
将获得值52
和testInt
将获得值0
(标准保证所有未提供值的成员将初始化为0.