为什么`CClientDC dc(this);`不能替换为`CClientDC dc = CClientDC(this);`

Lau*_*ura 1 c++ mfc visual-c++

我是MFC编程的新手.这些天我使用Jeff Prosise的书来学习MFC编程.我遇到过:CClientDC dc (this);我从CClientDC类的定义中找到了一个构造函数:CClientDC(CWnd* pWnd);但是如果我替换CClientDC dc (this);CClientDC dc = CClientDC(this);.编译告诉我这是一个错误.我无法理解.我认为CClientDC dc (this);是一样的CClientDC dc = CClientDC(this);.或者换句话说,前者是一种简单的形式.

非常感谢.

Jos*_*eld 7

CClientDC dc = CClientDC(this);
Run Code Online (Sandbox Code Playgroud)

相当于

CClientDC dc(CClientDC(this));
Run Code Online (Sandbox Code Playgroud)

为此,CClientDC必须有一个复制或移动构造函数,因为您基本上是dc通过从临时对象复制来构建的.

如果初始化是复制初始化,其中源类型的cv-nonqualified版本与目标的类相同,则考虑构造函数.[...]调用如此选择的构造函数来初始化对象,初始化表达式或表达式列表作为其参数.如果没有构造函数适用,或者重载决策是不明确的,则初始化是错误的.