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]对我来说是完全可读的.
除了litb的回答很好,我应该说是有功能at的vector类,允许您按如下方式使用它:
int a = vecPtr->at(0);
Run Code Online (Sandbox Code Playgroud)
该成员函数和成员操作符函数之间的区别在于operator[],vector::at如果请求的位置超出范围,则通过抛出out_of_range异常来发出信号.