C++ operator oveload
C++ operator oveload
>我有以下类声明:
Class A
{
A &operator =(const ACHAR *s); // (1)
A &operator =(A &a); // (2)
A operator +(const ACHAR *s); // (3)
operator ACHAR*(); // (4)
};
现在,当我运行此代码时:
A x,y;
ACHAR *p;
x=y; // (2)
x=y+p; (3)(4)(1)
第一个赋值 x=y 调用 (2( 运算符 =,正如预期的那样。
但是第二个赋值会引发强制转换运算符,而 (1( 运算符=。
现在,由于 (3( 运算符 + 返回类 A,我希望调用 (2( 运算符 =。
为什么会发生这种情况,以及如何解决*这个问题?
提前感谢!
A& operator=(A& a);
它应该是:
A& operator=(const A &a);
^^^^^
在你的情况下,y + p
产生一个 A
类型的右值,不能被非常量引用A&
捕获,所以调用 4 和 1 而不是 2。
相关文章:
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 'operator='已弃用:改用 QDir::setPath()
- 过载'operator new'如何导致无限循环?
- 与'operator='不匹配(操作数类型'String'且"void")
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 处理"no operator found"
- 如何编写 operator= 用于使用虚拟方法与非平凡成员的匿名联合
- 运算符重载:"operator+"必须采用零个或一个参数
- 使用 operator() 扩展 Eigen::EigenBase
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- "operator +="行为异常的定义
- C++ "error: use of overloaded operator '*' is ambiguous"似乎只有一场比赛
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息
- 为什么 operator() 处的指针成员不起作用?
- 为什么 string_view::operator== 按值接受参数
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- Valarray 切片数组与 'operator*' 不匹配
- C++ operator oveload