遇到的一个模板问题

    技术2022-05-19  55

        看下面的代码:

    #include <iostream> using namespace std; template<typename T> struct Traits { static T emptyValue() { return T(); } }; template<typename T> class Map : public Traits<T> { }; class Base { }; int main() { Map<Base*> m; Base *b = m.emptyValue(); cout<<b<<endl; return 0; }  

     

        结果会输出什么呢?

        关键在于函数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。

     


    最新回复(0)