c – 初始化指向结构的指针 – 编译器警告

#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选项进行编译的原因.

上一篇:注册表的写入以及环境的删除和使用


下一篇:Delphi 转换大小写字符(UpperCase、LowerCase)