C++显式构造函数和强制转换
C++ explicit constructor and cast
在《有效C++》一书中,第27项
class Widget {
public:
explicit Widget(int size);
...
};
void doSomeWork(const Widget& w);
doSomeWork(Widget(15)); // create Widget from int
// with function-style cast
我不确定调用doSomeWork时到底发生了什么。我认为函数doSomeWork的参数w是由另一个使用复制构造函数的Widget对象初始化的,但另一个Widget对象在哪里?是否如注释所示,是通过强制转换创建的临时对象?有人能详细告诉我在初始化doSomeWork函数参数时调用了什么吗?
函数doSomeWork
的参数w
是您在行中作为参数创建的Widget
doSomeWork(Widget(15));
doSomeWork
需要一个Widget
,而已经使用您列出的构造函数显式提供了一个。没有使用编译器提供的复制构造函数,因为doSomeWork(const Widget &w)
签名使用了传递引用语义。
只构造了一个对象,尽管可以使用传递值,而且聪明的现代编译器会将构造推迟到方法的范围内,以避免重复构造。
相关文章:
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- enable_if转换构造函数(静态强制转换,is_base_of)
- 为什么我需要在转换构造函数上引用 this->?
- 为什么在使用转换构造函数编译代码时需要 const 复制构造函数?
- 为什么不对转换构造函数进行隐式强制转换?
- 转换构造函数和运算符都存在且涉及显式性时的行为
- C++ 03 类模板 这是转换构造函数还是转换运算符?以及如何声明解决此问题的方法
- 使用完美转发的模板转换构造函数
- 转换构造函数的参数可以隐式转换吗?
- std::变量转换构造函数行为
- 隐式用户定义的转换不起作用,因为在编译C 时无法识别运算符和转换构造函数
- 为什么不调用模板类中的转换构造函数?
- 转换构造函数的隐式参数
- 转换构造函数:您如何解释C 中给定不同参数的函数
- C++变体:为什么转换构造函数需要大小.(类型)为非零
- C++变体用bool转换构造函数
- 在重载解析期间调用转换运算符,而不是在 c++17 中转换构造函数
- 为什么在没有赋值运算符的情况下调用转换构造函数
- 如何将转换构造函数与指针一起使用?
- 为什么在调用隐式类型转换构造函数之后直接是驱动器