#include <iostream>
using namespace std;
struct test
{
int factorX;
double coefficient;
};
int main()
{
test firstTest = {1, 7.5}; //that's ok
test *secondTest = new test;
*secondTest = {8, 55.2}; // issue a compiler warning
}
我不明白为什么编译器发出以下警告:
test2.cpp:13:33: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
test2.cpp:13:33: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
我知道在C 11中我可以省略赋值运算符,但事实并非如此.
我使用的是g 4.7.2.
解决方法:
您的测试结构是一个聚合.虽然在C 98中支持使用大括号语法初始化aggregate,但分配不是.
在这里,真正发生的是编译器调用隐式生成的移动赋值运算符,该运算符接受测试&& amp;作为它的输入.为了使这个调用合法,编译器必须通过构造一个临时函数将{8,55.2}转换为测试实例,然后从这个临时文件中移动 – 赋值* secondTest.
仅在C 11中支持此行为,这就是编译器告诉您必须使用-std = c 11选项进行编译的原因.