考虑this讨论。我有以下代码
list << (Database::ParameterX){"id_raw_tb", 100000};
其中,
QList<Database::ParameterX> list;
和
struct ParameterX {
QString name;
double max;
};
但是Qt Creator 3.3.0建议我说它并不好,用红色表示。但是没有错误消息,程序编译并按预期运行。
为什么Qt Creator强调它呢?
答案 0 :(得分:1)
该表达式在C99和C ++ 11中有效,但在C ++ 98中无效。也许波浪线检查器设置为C ++ 98,而主编译器使用C ++ 11。
答案 1 :(得分:1)
该表达式看起来像一个&#34;复合字面值&#34;来自C99,它不会在C ++中工作。
您可以将其更改为:
Database::ParameterX param = {"id_raw_tb", 100000};
list << param;
或者如果你想使用它内联,你可以为你的struct定义一个构造函数,这样你就可以写:
list << Database::ParameterX("id_raw_tb", 100000);
修改强>
使用C ++ 11,这也应该有效(使用&#34;统一初始化&#34;语法):
list.append({"id_raw_tb", 100000});
编辑2:
至于它编译的原因:我用GCC 4.8尝试过,它确实编译了,但当你打开&#34; -pedantic&#34;时,它会告诉你:
warning: ISO C++ forbids compound-literals
所以这是一个特定于GCC的功能,可能无法与其他编译器一起编译。 QtCreator最有可能实现支持符合标准的代码。