1

考虑到这个讨论。我有以下代码

list << (Database::ParameterX){"id_raw_tb", 100000};

在哪里,

QList<Database::ParameterX> list;

struct ParameterX {
    QString name;
    double max;
};

但是 Qt Creator 3.3.0 建议我这还不够好,用红色下划线。但是没有错误消息,程序编译并按预期运行。

为什么 Qt Creator 会在其下划线?

4

2 回答 2

1

该表达式看起来像 C99 中的“复合文字”,在 C++ 中不起作用。

您可以将其更改为:

Database::ParameterX param = {"id_raw_tb", 100000};
list << param;

或者如果你想内联使用它,你可以为你的结构定义一个构造函数,这样你就可以编写:

list << Database::ParameterX("id_raw_tb", 100000);

编辑:

对于 C++11,这也应该有效(使用“统一初始化”语法):

list.append({"id_raw_tb", 100000});

编辑2:

至于为什么会编译:我用 GCC 4.8 试过,确实可以编译,但是当你打开“-pedantic”时,它会告诉你:

warning: ISO C++ forbids compound-literals

所以这是 GCC 特有的功能,可能无法与其他编译器一起编译。并且 QtCreator 很可能被实现为支持符合标准的代码。

于 2015-01-23T14:46:49.233 回答
1

该表达式在 C99 和 C++11 中有效,但在 C++98 中无效。也许波浪线检查器设置为 C++98,而主编译器使用 C++11。

于 2015-01-23T10:43:49.880 回答