简单的重量级问题!语言专家的追问
//假设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解释得很好.