首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

简单的重量级有关问题!语言专家的追问

2012-03-01 
简单的重量级问题!语言专家的追问 //假设T是类别名称,考虑到构造函数以及可能的重载操作符=,//下面两行代

简单的重量级问题!语言专家的追问

//假设T是类别名称,考虑到构造函数以及可能的重载操作符=,
//下面两行代码有何区别?

T   t(0);

T   t   =   0;


[解决办法]
T t(0);

创建T对象t,调用可接受一个参数的构造函数,无论此构造函数有无explicit修饰.

T t = 0;

首先,如果可接受一个参数的构造函数带有explicit修饰,那么这条语句编译错误(因为不允许隐式转换,但 T t = T(0); 是可以的).
其次,如果可接受一个参数的构造函数不带有explicit修饰,那么这条语句可能出现两种情况(随实现而亦):
一种情况是 直接调用可接受一个参数的构造函数创建T的对象t(这种编译器很 "聪明 ").
另一种情况是 调用可接受一个参数的构造函数创建一个临时T的对象, 然后调用=操作符给t赋值(这种编译器 "笨 "了点).


[解决办法]
大多数的书上说没有区别.
snprintf解释得很好.


热点排行