【发布时间】:2014-12-11 21:31:38
【问题描述】:
我正在阅读“C++ Primer(第 5 版)”,并且遇到了一些我不确定自己理解正确的内容。
这个例子与他们在书中给出的例子非常相似。假设我们有一些函数返回字符串(或任何具有非静态成员的类):
string some_function(par1, par2) {
string str;
// some code
return str;
}
我知道你可以使用任何函数的返回值来访问它的成员,即这样的东西是有效的:
auto size = some_function(arg1, arg2).size(); // or whatever member of class
但是,由于点运算符.和函数调用运算符()具有从左到右的分组和相同的优先级,所以上面的表达式应该是这样的:
(some_function(arg1, arg2)).size()
我想到目前为止我是对的?我在这里不明白的是评估顺序。由于没有为. 运算符指定评估顺序,这意味着将首先评估some_function(arg1, arg2) 或size()。但是,如果它不知道它正在处理哪个对象,它如何首先评估size()?这意味着评估顺序应该从左到右固定,但事实并非如此。这怎么可能?
另一个例子是这样的:
cin.get().get();
再一次,似乎第一个 cin.get() 应该在第二个 get() 之前评估,因为它不知道它在哪个对象上工作,但这似乎不一定是这种情况。
【问题讨论】:
标签: c++ operators operator-precedence