通过左值引用修改右值的行为是什么?
What's the behavior of modifying rvalues through lvalue reference?
假设我有以下内容:
class foo
{
public:
foo& Ref() { return *this; }
int stuff;
};
void do_stuff(foo& f)
{
f.stuff = 1;
}
int main()
{
do_stuff(foo().Ref());
}
我正在通过左值引用修改右值。这合法吗?如果是或不是,有人能解释原因并在标准中提供相关章节吗?
我正在通过左值引用修改右值。
不,你不是。在do_stuff
中,表达式f
是一个左值,而不是右值值类别是关于表达式,而不是对象;对象具有类型。
你正在修改一个临时的,但没关系。我不能引用任何一段简单的话来说明这一点;任何地方都不禁止修改碰巧是临时对象的对象。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 在不编写显式 setter 的情况下修改私有类数据成员的便捷方法是什么?模板有用吗?
- 什么是可修改的rvalue
- 在 lambda 表达式中自动推导出的类型是什么,用于修改 bool 类型的向量(特殊容器)
- 如果我创建一个修改值的迭代器,静态成员"reference"应该是什么类型?
- 修改映射中包含的类的正确方法是什么
- 通过左值引用修改右值的行为是什么?
- 当我们可以使用普通函数修改静态数据成员时,静态成员函数的需求是什么?
- 当需要修改元素时,另一种类似集合的数据结构是什么?
- 在std::map中修改元素键的最快方法是什么?