C++ 使用其他对象的类构造函数

C++ 使用其他对象的类构造函数,c++,constructor,operator-overloading,C++,Constructor,Operator Overloading,因此,我有以下代码可以很好地工作: CMyClass& CMyClass::operator=(DWORD rhs) ... CMyClass exc; exc = GetLastError(); 它完成了我所期望的一切(调用=操作符中的内容) 我想知道如何得到它,这样我就可以像下面这样写: CMyClass exc = GetLastError(); 我尝试使用上面的函数,但它没有调用=操作符功能,而是留给我一个只调用了默认构造函数的类 谢谢需要一个构造函数 CMyClass

因此,我有以下代码可以很好地工作:

CMyClass& CMyClass::operator=(DWORD rhs) 

...

CMyClass exc;
exc = GetLastError();
它完成了我所期望的一切(调用
=
操作符中的内容) 我想知道如何得到它,这样我就可以像下面这样写:

CMyClass exc = GetLastError();
我尝试使用上面的函数,但它没有调用
=
操作符功能,而是留给我一个只调用了默认构造函数的类


谢谢

需要一个构造函数

CMyClass(DWORD rhs)
或明确的

explicit CMyClass(DWORD rhs)
请注意,隐式构造函数允许编译此函数

CMyClass exc = GetLastError();
但它也参与编译器生成的隐式构造和转换。一般来说,最好是直截了当地写出来

CMyClass exc ( GetLastError() );

编写一个转换构造函数,
CMyClass(DWORD rhs)。然后你甚至可以摆脱赋值操作符。好的,谢谢。请你澄清一下你所说的
它还参与编译器生成的隐式构造和转换
基本上,如果另一种类型说,
类ABC
有一个到
DWORD
的类型转换(
操作符DWORD();
),那么它也会编译<代码>CMyClass exc=abc其中
abc
abc
的一个实例。更糟糕的是,如果
CMyClass
是函数
void Func(CMyClass)
的一个参数,那么这将编译
Func(abc)
@Luke,有关显式的详细信息,请参阅。第一个答案基本上与我给你的例子相同。第二个答案有更多的原因。。。最好的建议是通常(默认情况下)添加显式,除非要求不存在显式。