调用构造函数或转换
Constructor or conversion is called?
例如
struct A
{
A(B const& b) {} // function 1
};
struct B
{
operator A() const { return A(); } // function 2
};
和
B b;
A a(b); // function 1 is called.
有什么方法可以使a
通过函数 2 构造或转换?
按照你编写它的方式,重载分辨率选择了A
的 ctor。如果你写得稍微不同:
A a = b
这将导致转换不明确的错误。如果将A
的 ctor 更改为显式:
explicit A(const B&) {}
然后它会选择B
的转换运算符,而不是A
的ctor,并用行A a = b
调用A
的ctor A a(b)
如果真的想强制B
的转换运算符,可以随时显式调用它:
A a = b.operator A();
相关文章:
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- enable_if转换构造函数(静态强制转换,is_base_of)
- 为什么我需要在转换构造函数上引用 this->?
- 为什么在使用转换构造函数编译代码时需要 const 复制构造函数?
- 为什么不对转换构造函数进行隐式强制转换?
- 转换构造函数和运算符都存在且涉及显式性时的行为
- C++ 03 类模板 这是转换构造函数还是转换运算符?以及如何声明解决此问题的方法
- 使用完美转发的模板转换构造函数
- 转换构造函数的参数可以隐式转换吗?
- std::变量转换构造函数行为
- 隐式用户定义的转换不起作用,因为在编译C 时无法识别运算符和转换构造函数
- 为什么不调用模板类中的转换构造函数?
- 转换构造函数的隐式参数
- 转换构造函数:您如何解释C 中给定不同参数的函数
- C++变体:为什么转换构造函数需要大小.(类型)为非零
- C++变体用bool转换构造函数
- 在重载解析期间调用转换运算符,而不是在 c++17 中转换构造函数
- 为什么在没有赋值运算符的情况下调用转换构造函数
- 如何将转换构造函数与指针一起使用?
- 为什么在调用隐式类型转换构造函数之后直接是驱动器