c++ - 使用++ 作为通过类成员访问语句的前缀不会导致错误

标签 c++

我现在有点困惑,我正在运行以下代码:

std::vector<int> test{1, 5, 10};
++test.at(1); // I'm trying to increment that number 5 to six, which works
std::cout << test.at(1) << std::endl; // Prints out 6 to the console
我期待它给我一个编译器错误,因为正如我从运算符优先级中读到的那样. (用于成员访问)和增量运算符( ++ )具有相同的优先级,但根据我的理解,它们在语句中从左到右阅读。所以在上面显示的代码中,我认为它等于说 (++test).at(1) ,这显然会导致编译器错误。为什么即使关联性从左到右也不是这种情况,为什么它像这样读取它(根据我的想法)... ++(test.at(1)) ?如果它们具有相同的优先级,不是吗,就像在数学中一样,例如,使用 ++先是 . ?

最佳答案

确实,后缀增量( a++ )和成员访问( . )具有相同的优先级。
但是您正在使用前缀增量( ++a )。
咨询 cppreference's precedence chart .
确实,test++.at(i)会因为你给出的原因而出错,但作为代码的读者,在这种情况下我们不会以任何方式感到惊讶。

关于c++ - 使用++ 作为通过类成员访问语句的前缀不会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65044085/

相关文章:

c++ - 在类定义中使用 'this'

c++ - boost 图形库 : Merging undirected graphs

C++ 控制台程序在完成前关闭。

c++ - 如何选择一个类来动态实例化?

c++ - 初始化程序列表中的非常量表达式不能从 'int'类型缩小为 'unsigned long long'

c++ - 为什么 stack<const string> 不能在 g++ 中编译?

c++ - 实现 is_constexpr_copiable

c++ - 在 c++ 或 c 或 Objective-C 中解压缩 split Zip 或/和 multi zip

c++ - vector <X*>* 与 vector <X>*

c++ - 函数定义的源文件