常量转换运算符的行为
Behaviour of const conversion operator
在下面的代码中,有一个转换运算符,用于将类 A 对象转换为 const 类 B 对象。
我的问题是当创建 const B 对象时,为什么它的值会变为b.v=20 没有给出任何错误。
可能,我错过了一些东西。
提前感谢
class B
{
public:
int v;
B() : v(10) {}
};
class A
{
public:
operator B() const {}
};
void g(B b)
{
b.v=20;
}
int main()
{
A a;
g(a);
return 0;
}
成员
函数签名后的const
与返回类型无关;它只意味着函数(或它返回的值)不会改变原始对象的状态,即不会改变标记为mutable
的成员以外的成员。
此外,您的函数g()
按值获取参数,因此无论如何都会复制它。
你的函数接受参数按值,所以它是返回的内容的副本,它不是const
- 所以你可以在正文中修改。
void g(B b)
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 构造函数和转换运算符之间的重载解析
- 分配给转换运算符失败-C++
- 转换运算符不适用于sleep_until
- 尝试使用算术运算符阻止隐式转换
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 是否可以将带有字符串化运算符的宏转换为 constexpr?
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 继承模板化转换运算符
- 将 OR 逻辑运算符从 C++ 转换为 Fortran
- 模板转换运算符在 clang 6 和 clang 7 之间的区别
- 如何在C++中正确重载运算符转换字符*?
- 将私有结构哈希器运算符转换为静态
- 混合类型的Boost运算符-转换和私有成员
- 如何将 c++ 运算符转换为 Java
- 运算符转换,GCC 和 clang:哪个编译器是正确的
- 将 istream 运算符>>转换为 istream getline
- 在C++中,将任意在位运算符转换为一元运算符
- 将运算符转换为 std::复杂<double>
- 为什么按位否定运算符"~"转换为 int?(从"int"转换为"无符号字符"可能会改变其值)