赋值运算符的返回类型是什么
what is return type of assignment operator?
我刚刚开始使用C++。我对赋值和取消引用运算符的返回类型有点困惑。我正在读C++初级读本。在各种情况下,作者说赋值运算符的返回类型是指左手操作数的类型,但后来他说返回类型是左手操作数类型。我参考了C++11标准第5.17节,其中返回类型被描述为"指左手操作数的左值"。
类似地,我不知道解引用是返回指向对象还是返回对对象的引用。
这些陈述是否等效?如果是,那么怎么做呢?如有任何解释,不胜感激。
标准正确定义了赋值运算符的返回类型。实际上,赋值操作本身并不依赖于返回值——这就是为什么返回类型不容易理解的原因。
返回类型对于链接操作非常重要。考虑以下构造:a = b = c;
。这应该等于a = (b = c)
,即c
应该被分配到b
,b
应该被分配给a
。将其重写为a.operator=(b.operator=(c))
。为了使a
中的赋值正确工作,b.operator=(c)
的返回类型必须引用内部赋值结果(它也可以使用副本,但这只是不必要的开销(。
解引用运算符返回类型取决于您的内部逻辑,以适合您需要的方式定义它。
它们都可以是任何东西,但通常operator =
通过引用返回当前对象,即
A& A::operator = ( ... )
{
return *this;
}
是的,"引用左手操作数的类型"answers"左值引用右手操作数"的意思是一样的。
取消引用运算符基本上可以有任何返回类型。它主要取决于程序的逻辑,因为您正在重载应用于对象的运算符,而不是应用于指向对象的指针的运算符。通常,这用于智能指针或迭代器,并返回它们环绕的对象:
struct smart_ptr
{
T* innerPtr;
T* smart_ptr::operator* ()
{
return innerPtr;
}
}
smart_ptr p;
T* x = *p;
我见过类似的问题,但我想最好使用
X& X::operator=(const X&);
使用它,您将能够在链分配中重用对象。
相关文章:
- 返回类型在 C++ OOP 中是什么意思
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- T*&返回类型到底是什么
- c++运算符重载-我实际返回的操作数类型是什么
- 运算符和返回类型是什么意思?
- STD :: SETW,STD :: SETFILL等的真实返回类型是什么?
- const 在具有尾随返回类型的自动退货声明中是什么意思
- 返回可能在C++中分配在堆栈上的成员时,最佳指针/引用类型是什么
- C++协方差返回类型的缺点是什么
- 尾随返回类型中的占位符类型的用途是什么
- C++中以下函数的返回类型是什么
- 此函数的返回类型是什么
- 提升的返回类型是什么::apply_visitor(延迟版本)
- C 中构造函数的返回类型是什么
- 实际上什么返回类型有一个新的
- 是覆盖返回类型所需的指针-继承
- 解析是如何工作的,或者是什么使类型完整或不完整
- 在 S 被解析为 for(auto &s :text)后,S 应该是什么类类型?
- 在知道变量是什么数据类型之前如何声明它
- 指针赋值应该使用什么返回类型?