C++中如何详细理解拷贝构造函数与explicit关键字?

2026-05-08 16:082阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计621个文字,预计阅读时间需要3分钟。

C++中如何详细理解拷贝构造函数与explicit关键字?

关键字 explicit 用于修饰构造方法,表明构造方法需要显式调用,不能隐式初始化对象。不添加 explicit 关键字时,编译器可以隐式地调用无参构造方法来初始化对象;添加 explicit 关键字后,必须显式调用构造方法。下面的代码是可正常编译和执行的,因为添加了 explicit 关键字,编译器会要求显式调用构造方法。

关键字explicit

修饰构造方法的关键字,加上了,就告诉编译器,不可以隐式初始化对象;不加就可以隐式初始化对象;
下面的代码是可以正常编译执行的,但是加了关键字explicit,编译就会错我,因为Test t = 100;是隐式初始化对象,但是如果加上强制类型转换后,就不会有错误了。

强制类型转换:Test t = (Test)100;

class Test{ public: Test(int d):data(d){//explicit cout << "C:" << this << endl; } } int main(){ Test t = 100; } 拷贝构造函数如果加上了explicit,下面的语句就无法编译通过;不加可以。

阅读全文

本文共计621个文字,预计阅读时间需要3分钟。

C++中如何详细理解拷贝构造函数与explicit关键字?

关键字 explicit 用于修饰构造方法,表明构造方法需要显式调用,不能隐式初始化对象。不添加 explicit 关键字时,编译器可以隐式地调用无参构造方法来初始化对象;添加 explicit 关键字后,必须显式调用构造方法。下面的代码是可正常编译和执行的,因为添加了 explicit 关键字,编译器会要求显式调用构造方法。

关键字explicit

修饰构造方法的关键字,加上了,就告诉编译器,不可以隐式初始化对象;不加就可以隐式初始化对象;
下面的代码是可以正常编译执行的,但是加了关键字explicit,编译就会错我,因为Test t = 100;是隐式初始化对象,但是如果加上强制类型转换后,就不会有错误了。

强制类型转换:Test t = (Test)100;

class Test{ public: Test(int d):data(d){//explicit cout << "C:" << this << endl; } } int main(){ Test t = 100; } 拷贝构造函数如果加上了explicit,下面的语句就无法编译通过;不加可以。

阅读全文