从int到类类型的隐式转换
Implicit conversion from int to a class type
我遇到了一些代码,如下所示:
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents) : m_nCents(nCents)
{
}
};
int main(){
Cents c = 0; // why is this possible?
}
为什么可以从int转换为类Cents的类型?此外,在这种情况下是否调用了复制构造函数?
为什么可以从int转换为类Cents的类型?
这是允许的,因为有时它很方便。但这也可能有问题:这就是为什么你可以通过使类构造函数explicit
来禁止这种隐式构造。
此外,在这种情况下是否调用了复制构造函数?
由于它是一个右值,因此调用将是移动构造函数/赋值(可以回退到复制构造函数/赋值);但编译器可能会忽略这一点。如果你写得很明确,它将相当于:
Cents c = Cents(0);
相关文章:
- 无法转换类型 C++
- 包含可变参数包的第一个可转换类型的别名的结构
- 将 std::conditional 与不可转换类型(原始与指针)一起使用
- 链接方法时出现转换类型错误
- 如何避免隐式转换类型
- 在多重继承场景中动态强制转换类型
- 编译器不支持的转换类型
- 错误调用功能无法转换类型
- 我想看到一个在整个后缀表达式的上下文中查找转换类型 id 的示例
- 对于动态类型为强制转换类型的对象,dynamic_cast失败
- 无法在初始化中转换类型
- 如何让"auto"转换类型
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 如何从新运算符+(Template类)返回具有转换类型的对象
- 带有模板的基于枚举的工厂无法转换类型
- 使用SWIG类型映射通过字符串转换类型
- 对于可转换类型,设计比循环依赖项更好
- SWIG不能正确转换类型定义
- 将类型转换扩展到可转换类型的对/元组
- 想要将字符数组的部分转换/类型转换为值