C++箭头运算符 (->) 是否在所有情况下都返回左值?
Does the C++ Arrow Operator (->) return an lvalue in all cases?
根据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(( 时,它不可能是赋值运算符的左操作数吧?
- 如果箭头运算符返回一个左值,它是否不必始终返回?还是此规则有例外?
这本书的意思是,iter_str->
产生一个左值,即你正在使用的对象的值类别是一个左值。iter_str->empty()
的整个表达式仍然是右值,因为empty
按值返回。 以这样的类为例
struct integer {
int x;
int& ref() & {
return x;
}
};
在这里,由于ref 限定符,ref
只能在 lvalue 对象上合法调用。 如果我们有一个像这样的函数
integer* get_integer_ptr() { return new integer; }
那么我们可以合法地做
int foo = get_integer_ptr()->ref();
即使指针是右值,它也访问左值对象,因此对ref
的调用是合法的。
是的,存在内存泄漏,但出于示例的目的,我们可以忽略它。
相关文章:
- 如何在不销毁对象的情况下返回对象列表
- 串行读取()不会在没有数据接收的情况下返回值
- 在开关情况下返回布尔值
- 范围分辨率运算符在类型:: var的情况下返回什么
- -std=c++0x 导致在 boost 1.64 的情况下返回对临时的引用
- 如何在不转换回基类类型的情况下返回派生类型的对象?
- 在没有 RVO 的情况下返回类/结构时会发生什么?
- 在给定表达式的情况下返回对类型的引用时出错:“cond ?*这个 : 投掷()'
- 返回 1 在阶乘的情况下返回 0
- 如何在不取消引用指针的情况下返回指针指针值?
- 如何使minmax_element在平局的情况下返回索引最少的元素
- 在没有读取权限 c++ 的情况下返回大小文件
- 如何在没有显式方法声明的情况下返回值
- 如何在没有编译器警告的情况下返回对空字符串的 const 引用?
- 我不能在不使用指针的情况下返回 2d 数组!我正在制作一个井字游戏类型游戏,这是我的向上移动功能
- 如何在没有指针的情况下返回动态结构
- 如何在<T>没有 if 语句的情况下返回可选?
- 如何在成功或失败的情况下返回std::copy的值
- glDrawElements()在无效情况下返回GL_INVALID_ENUM
- 在没有移动函数的情况下返回不可复制对象的解决方法