Can I avoid an ambiguity, when I declare a fixed l

2019-03-01 15:01发布

问题:

I want to declare a vector of 2 elements as a class member. But next code generates an error:

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

The compiler curses about "2" is constant. As I understand, the problem is, the ambiguity arises, because the compiler parses the string of vector declaration as an function declaration (function, that takes "2" as an argument and returns vector of ints).

Question: Can I avoid this ambiguity? How can I do this?

PS: outside the class this vector declaration is parsed correctly.

回答1:

An in-class initialiser has to use braces or the equals sign; so this could be

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

or

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

Alternatively, you could use old-school initialisation in the constructor(s):

A() : v(2) {}


回答2:

You can safely use this syntax:

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

Alternatively, use brace initialization, but you must be careful: the std::initializer_list<int> constructor will be picked, so to initialize a vector with two value- (therefore zero-) initialized ints you need

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