使用分配进行显式转换
Explicit conversion with Assignment
具有显式转换构造函数的简单类。
class MyDouble {
double d;
public:
MyDouble() : d(0) {}
explicit MyDouble(double d_) : d(d_) {}
MyDouble & operator =(double d_) {
d = d_; return *this;
}
};
我故意添加一个赋值,使其可以从double
构造分配。
MyDouble a;
a = 1.1; // this works
MyDouble b = MyDouble(1.1); // this works
MyDouble c(1.1); // this works
MyDouble d = 1.1; // this does not work
我不想要隐式转换,因为它会导致其他一些问题。但我仍然想要直接分配工作,但它没有。无论如何,在不删除explicit
关键字的情况下使最后一个语句MyDouble d = 1.1;
工作。
您的问题的答案是"否",没有办法允许MyDouble d = 1。 而不删除显式。
你可以简单地使用 MyDouble d(1.(; 或 MyDouble d{1.}; 而不是使用赋值初始化。这将允许您保留显式内容,同时明确您正在初始化。
相关文章:
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- std::vector 范围构造函数可以调用显式转换吗?
- 从 uint8_t 到 int 的隐式转换出错了,当显式转换进展顺利时
- 从 int 显式转换为用户定义的类 c++
- 自动(toCast)显式转换是否计划在未来C++标准?
- 为什么C++隐式转换有效,而显式转换无效?
- 使用分配进行显式转换
- 使用 static_cast、dynamic_cast 或显式转换进行派生指向 Base 指针转换的指针不会调用 base 函数
- 返回语句中的C++11显式转换运算符/构造函数
- 如何解决Visual Studio 2012不支持显式转换运算符的问题
- 通过显式转换函数初始化枚举类类型的静态constexpr类成员
- C++ 为什么我们需要从一种类型显式转换为另一种类型
- 当显式转换是必需的并且隐式转换将不起作用时
- C++显式转换和隐式转换
- 如何争论多个显式转换函数
- C++显式转换构造函数
- 转换为枚举类型需要显式转换(static_cast、C样式转换或函数样式转换)
- 如何在模板中进行从本机类型到用户定义类型的显式转换
- 用户定义类(c++)是否有默认的显式转换函数
- 如何在构造具有不同类型元素的向量副本时显式转换