T t2(t1) 等价于 T t2 = t1 么

本文探讨了C++中显式构造函数的作用及其如何避免隐式类型转换,通过实例对比了使用与未使用explicit关键字的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Let's see the code:

// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class T
{
public:
T(){}
~T(){}
T(const T &other)
{
cout <<"copy constructor" <<endl;
}
T &operator=(const T &other)
{
cout <<"operator=()" <<endl;
return *this;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
T t;

T t1(t);
T t2 = t;

return 0;
}

As we all know, 't1' and 't2' will call copy constructor to initialize the new object. But if I change the code as follow:

class T
{
public:
T(){}
~T(){}
explicit T(const T &other) // Here we add keyword 'explicit' to avoid implicit convertion.
{
cout <<"copy constructor" <<endl;
}
T &operator=(const T &other)
{
cout <<"operator=()" <<endl;
return *this;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
T t;

T t1(t); // Explicit convertion. Ok.
T t2 = t; // Implicit convertion. Compilation error!

return 0;
}


Now you can see that two statement are not equivalence in some way.

 

This knowledge comes from <<C++ 标准程序库>> p.18.

转载于:https://www.cnblogs.com/walfud/articles/2351050.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值