读书人

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

发布时间: 2012-03-01 10:25:46 作者: rapoo

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

//假设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解释得很好.


读书人网 >C++

热点推荐