我可以分配成员访问操作员的返回值吗?
Can I assign to the return value of member access operator?
我已经读到成员访问操作员点运算符.
和箭头操作员->
返回值:
箭头操作员需要一个指针操作数并产生lvalue。如果获取成员的对象是lvalue,则点运算符会产生lvalue;否则结果是rvalue。
这是来自C 引物5版。
所以我想我可以分配一个值,每当非const lvalue是其表达式的返回,例如:
struct foo {
int x_;
const int y_ = 17; ;
void bar() { cout << "bar()" << endl;}
}f, *pf;
pf = &f;
(pf->bar()) = 75; // error
cout << f.x_ << endl;
(f.bar()) = 12;// error
(f.x_) = 23;
cout << "f_x: " << f.x_ << endl;
(pf->y_) = 34;// error
我对分配给箭头运算符的返回值感到困惑。上面据说->
总是返回lvalue,但是如果我尝试分配该值,则会失败。
- 任何人都可以向我解释C 书上面的段落。谢谢。
上面有人说 ->总是返回一个lvalue,但是如果我尝试分配该值,它会失败。
这是关于成员变量的,而不是函数。bar
返回void
,因此您永远无法分配。x_
起作用,因为它为您提供了整数LVALUE表达式。y_
失败,因为它是const
,并且您无法分配给const
变量。
所以,在
中foo bar;
foo* f = &bar;
f->x_;
f->y_;
两个成员访问产生的表达式。在
中foo f;
f.x_;
f.y_;
您再次拥有LVALUE,因为f
是一个LVALUE。但是,在
foo{}.x_;
foo{}.y_;
两个成员访问都是RVALUE,因为foo{}
是RVALUE。
我可以分配给成员访问操作员的返回值吗?
如果操作员的左手操作数是LVALUE,并且如果成员是可分配的,并且是非const,则是的。在其他情况下,第
(pf->bar()) = 75; // error
您未分配成员访问操作员的结果。您正在调用成员功能。结果是函数返回的内容。该函数返回void
,该函数无法分配。
(pf->y_) = 34;// error
您正在尝试分配const对象。即使表达式为lvalue,也是不明式的。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 为什么教科书使用初始化列表作为操作员的返回值(复杂A)
- 有条件的操作员从其参数的副本中返回值
- 我可以分配成员访问操作员的返回值吗?
- 分配操作员返回值类型