c++ - 为什么这被认为是一个扩展的初始化列表?

标签 c++ initializer-list

#include <vector>

struct foo {
    int i;
    int j;
    int k;
};

int main() {
    std::vector<foo> v(1);
    v[0] = {0, 0, 0};
    return 0;
}

使用 g++ 编译时,我收到以下警告:

warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]

不过,据我所知,它只是一个普通的初始化列表。该结构是 POD 类型。

这是一个错误还是我遗漏了什么?

最佳答案

Pre C++11(可能还有 C99)您只能在创建时初始化 POD,而不能在任意运行时点初始化,这就是您在这里尝试的操作(从初始化列表中赋值)。

不过你可以创建一个 null_foo:

int main()
{
    const foo null_foo = {0, 0, 0};
    std::vector<foo> v(1);
    v[0] = null_foo;
    return 0;
}

关于c++ - 为什么这被认为是一个扩展的初始化列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930773/

相关文章:

python - 具有多个种子的 OpenCV FloodFill

c++ - 扩展的初始化列表和数组

c++ - 使用初始值设定项列表从多个字符数组构造 std::string

c++ - 为什么在调用不明确的ctor时没有编译时错误?

c++ - new A[0] -- 合法,但有什么用?它实际上做了什么?

c++ - 重载括号 C++ 是个好主意

c++ - 调整椭圆大小

c++ - istringstream 的五倍输出

c++ - 我可以依赖 initializer_list::const_iterator 作为普通指针吗?

c++ - 遍历std::initializer_list