gpt4 book ai didi

c++ - C++ 箭头运算符 (->) 是否在所有情况下都返回左值?

转载 作者:行者123 更新时间:2023-11-27 23:35:56 30 4
gpt4 key购买 nike

根据 C++ 入门书,“箭头运算符需要一个指针操作数并产生一个左值”。总是这样吗?例如:

#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() 为例时,它不能是赋值运算符的左手操作数吧?
  • 如果箭头运算符返回一个左值,它不是必须一直返回吗?或者这条规则有异常(exception)吗?

最佳答案

书上说的是 iter_str-> 产生一个左值,也就是说你正在使用的对象的值类别是一个左值。 iter_str->empty() 的整个表达式仍然是一个右值,因为 empty 按值返回。以类为例

struct integer {
int x;
int& ref() & {
return x;
}
};

这里,ref 只能在左值对象上合法调用,因为 ref-qualifier。如果我们有这样的功能

integer* get_integer_ptr() { return new integer; }

那么我们可以合法地做

int foo = get_integer_ptr()->ref();

尽管指针是右值,但它正在访问左值对象,因此对 ref 的调用是合法的。


是的,存在内存泄漏,但为了示例的目的我们可以忽略它。

关于c++ - C++ 箭头运算符 (->) 是否在所有情况下都返回左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59196985/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com