我现在有点困惑,我正在运行以下代码:
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/