当我在课堂上声明一个固定长度的矢量时,我可以避免歧义吗?

时间:2014-07-10 14:30:08

标签: c++ vector ambiguity

我想声明一个包含2个元素的向量作为类成员。 但是下一个代码会产生错误:

class A {
private:
   std::vector<int> v (2);
   ...
}

编译器诅咒“2”是常量。 据我所知,问题是,出现歧义,因为编译器将向量声明的字符串解析为函数声明(函数,以“2”作为参数并返回整数向量)。

问题:我可以避免这种歧义吗?我怎么能这样做?

PS:在类之外,这个向量声明被正确解析。

2 个答案:

答案 0 :(得分:7)

课堂初学者必须使用大括号或等号;所以这可能是

std::vector<int> v = std::vector<int>(2);

std::vector<int> v {0,0};  // Careful! not {2}

或者,您可以在构造函数中使用旧式初始化:

A() : v(2) {}

答案 1 :(得分:4)

您可以安全地使用以下语法:

std::vector<int> v = std::vector<int>(2);

或者,使用大括号初始化,但必须小心:将挑选std::initializer_list<int>构造函数,以便初始化一个具有两个值(因此为零)初始化ints所需的向量

std::vector<int> v{0, 0};