#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;
}
使用括号初始值设定项似乎是一个错误。这背后的目的是什么。
答案 0 :(得分:8)
我们的想法是拒绝任何可以解释为函数声明的语法。例如,
std::vector<int> ns();
是一个函数声明。这些不是:
std::vector<int> ns{};
std::vector<int> ns = std::vector<int>();
为保持一致性,使用此表单的任何成员声明
T t(args...);
是不允许的,这可以避免重复最令人烦恼的解析惨败。