none
explicit RRS feed

  • 问题

  • explicit CDialog(
       LPCTSTRlpszTemplateName,
       CWnd*pParentWnd=NULL
    );

    CDialog的构造函数前面的explicit是什么意思起什么作用?    
    2012年10月3日 2:09

答案

  • 你好,

    在C++中,只含有一个参数的构造函数将自动执行隐式类型转换。

    例如:某个构造函数需要一个字符指针作为参数,但是你却传递了一个整形给它,这时候,构造函数将自动将这个整形转换为一个字符指针。

    添加explicit关键字,正是为了避免这样的隐式转换。用explicit修饰构造函数之后,构造函数将要求传递一个类型正确的参数,或者在调用构造函数时,显示地执行强制类型转换。否则编译器将报错。

    在你给的这个例子中,虽然CDialog构造函数含有两个参数,但是第二个参数有默认值NULL,所以explicit同样适用。

    需要注意的是,explicit只能用于类内部声明构造函数的时候。

    这里有几个例子供参考:

    http://blog.csdn.net/callmeback/article/details/4039304

    http://msdn.microsoft.com/zh-cn/library/h1y7x448.aspx (原文是英文,机器翻译)


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月4日 4:20
    版主