【发布时间】:2019-12-05 14:08:34
【问题描述】:
根据 C++ Primer 一书,“箭头运算符需要一个指针操作数并产生一个左值”。总是这样吗?例如:
#include<iostream>
#include<string>
using std::string; using std::vector;
int main()
{
vector<string> temp {"aaa", "bbb", "ccc"};
vector<string>::iterator iter_str = temp.begin();
bool result = iter_str->empty(); //the result of iter_str->empty() is not an lvalue right?
return 0;
}
- 当我们以表达式 iter_str->empty() 为例时,它不能是赋值运算符的左操作数吗?
- 如果箭头操作符返回一个左值,它不是一直都必须这样做吗?或者这条规则有例外吗?
【问题讨论】:
-
这里箭头运算符的结果就是成员函数
std::string::empty,是一个左值。尽管该值根本无法使用,除非立即调用它;函数调用运算符的结果是bool类型的右值。 -
@aschepler,这意味着 iter_str->empty() 的返回值实际上不是布尔值,而是字符串中的 empty() 方法对吗?并且该值立即作为一种方法执行,它的值是我收到的输出。好的,谢谢,但是 empty() 方法本身如何是左值,因为它不能位于赋值运算符的右侧,这让我感到困惑。
-
@aschepler 好答案 - 应该作为一个发布!