为什么支撑或相等的初始化器支撑或相等?

时间:2015-05-28 20:43:39

标签: c++

#include <iostream>
#include <vector>

struct S {
    //std::vector<int> ns(1); //ERROR!
    std::vector<int> ns = std::vector<int>(1);
};

int main() {
    S s;
    std::cout << (s.ns[0] = 123) << std::endl;
    return 0;
}

使用括号初始值设定项似乎是一个错误。这背后的目的是什么。

1 个答案:

答案 0 :(得分:8)

我们的想法是拒绝任何可以解释为函数声明的语法。例如,

std::vector<int> ns();

是一个函数声明。这些不是:

std::vector<int> ns{};
std::vector<int> ns = std::vector<int>();

为保持一致性,使用此表单的任何成员声明

T t(args...);

是不允许的,这可以避免重复最令人烦恼的解析惨败。