当对象位于赋值的右侧时,重载赋值运算符
Overloading assignment operator when the object is on the right-hand side of the assignment
给定以下代码:
template <typename T>
struct Wrapper {
T value;
Wrapper(T val) : value(val) {}
}
int main() {
Wrapper<int> x(42);
int y = x; // need solution for y = x.value
return 0;
}
有没有办法实现分配
int y = x;
因此它意味着y=x.value.
我知道重载赋值运算符本身是不可能的,因为它应用于赋值左侧的对象,而标准不允许带有两个参数的友元函数。
如果通过重载任何其他运算符或使用一些特殊技巧都不可能实现这一点,除了调用Wrapper类提供的get方法,例如:
int y = x.get();
为什么不提供到T
的隐式转换
operator T() { return value; }
这将导致赋值起作用,因为编译器将尝试将赋值的右侧转换为T
。隐式转换将使成功
请注意,这将导致除赋值之外的其他转换工作。例如,现在可以将Wrapper<T>
实例作为T
参数传递。这可能适用于也可能不适用于您的特定场景
相关文章:
- 使用赋值运算符重载从类中返回jobject
- 赋值运算符重载和自赋值
- C++ 指针赋值运算符重载(不仅是对象赋值,还有指针赋值)
- 赋值运算符重载在通过指针访问时不调用
- "return *this"赋值运算符重载
- 赋值运算符重载 c++ 的返回值
- 在对类对象的赋值进行链接时获取垃圾值,使用按值返回类对象的赋值运算符重载
- 在c++中的赋值运算符重载方法中删除旧的动态分配内存
- 复合赋值运算符重载
- 对象的动态内存和赋值运算符重载
- c++中的赋值运算符重载
- c++赋值运算符重载
- 如何通过赋值运算符重载将一个列表复制到另一个列表上?C++
- 赋值运算符重载和无效内存
- 赋值运算符重载 -- 错误 C2440:'==':无法从 'A<T> *' 转换为 'A<T> *const '
- 为什么内存泄漏只发生在赋值运算符重载的情况下,而不是在复制构造函数中,以及复制和交换习惯用法如何解决它
- 内存泄漏,使赋值运算符重载、新建、删除和C++
- C++中的效率和赋值运算符重载
- 赋值运算符重载/检索功能
- 为什么在赋值运算符重载中返回引用