为什么这种语法无效?vectorPointer - > [0]

Fra*_*ank 1 c++ syntax vector operator-overloading

C++,为什么以下元素访问vector无效?

void foo(std::vector<int>* vecPtr) {
  int n = vecPtr->size(); // ok
  int a = vecPtr->[0];    // invalid
}
Run Code Online (Sandbox Code Playgroud)

相反,我们必须编写更繁琐的内容

  (*vecPtr)[0] = 1;
Run Code Online (Sandbox Code Playgroud)

我认为,operator[]调用应该具有与方法调用相同的语法,并且我讨厌额外的星和括号.(我知道C++有很多严重的问题,但每当我输入它时,这个问题都会让我烦恼...)

Joh*_*itb 12

这是因为语言期望会员出现->.这就是语言的组成方式.如果您愿意,可以使用函数调用语法

// not really nicer
vecPtr->operator[](0);
Run Code Online (Sandbox Code Playgroud)

如果你有这个做了很多的顺序,使用[0]替代括号可以大大提高可读性

vecPtr[0][0]
Run Code Online (Sandbox Code Playgroud)

否则,对于一个级别,我发现(*vecPtr)[0]对我来说是完全可读的.

  • +1此外,您可以将矢量分配给ref,就是这样! (7认同)

Kir*_*sky 5

除了litb的回答很好,我应该说是有功能atvector类,允许您按如下方式使用它:

 int a = vecPtr->at(0);
Run Code Online (Sandbox Code Playgroud)

该成员函数和成员操作符函数之间的区别在于operator[],vector::at如果请求的位置超出范围,则通过抛出out_of_range异常来发出信号.