看下面的代码:
结果会输出什么呢?
关键在于函数static T emptyValue() { return T(); }。如果传入的T是一个Base,那么可以知道它返回一个Base对象(调用默认构造函数)。但如果T是Base*,会怎么样呢?“Base*()”?这编译通不过!
其实,得这么看这个问题:
typedef Base* PB;
PB pb = PB(); // 这样是正确的。
同样的:
PB pb = PB(0); // pb=0x00000000,PB()也就是该值
PB pb = PB(1); // pb=0x00000001
PB pb = PB(456); // pb=0x000001C8
经过上面的分析,程序的输出就是0x00000000。