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

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

相反,我们必须编写更麻烦的
  (*vecPtr)[0] = 1;

我认为operator[]调用应具有与方法调用相同的语法,并且我讨厌多余的星号和括号。 (我知道C++有很多更严重的问题,但是每次我必须键入它时,都会使我烦恼……)

最佳答案

这是因为该语言希望成员出现在->之后。这就是语言的构成方式。如果愿意,可以使用函数调用语法

// not really nicer
vecPtr->operator[](0);

如果必须按顺序执行很多操作,则使用[0]而不是括号可以大大提高可读性
vecPtr[0][0]

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

10-06 05:22