内联结构使用

时间:2015-01-23 10:19:09

标签: c++ qt compound-literals

考虑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强调它呢?

2 个答案:

答案 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最有可能实现支持符合标准的代码。