C++ template一些体悟

#include <iostream>

using namespace std;

template<typename T>
class testClass {
public:
    static T _data;
};

template<typename T>
T testClass<T>::_data = 1;

int main(int argc, char **argv) {
    cout << testClass<int>::_data << endl;
    cout << testClass<char>::_data << endl;

    testClass<int> obji1, obji2;
    testClass<char> objc1, objc2;
    cout << obji1._data << endl;
    cout << obji2._data << endl;
    cout << objc1._data << endl;
    cout << objc2._data << endl;

    obji1._data = 3;
    objc2._data = 4;
    cout << obji1._data << endl;
    cout << obji2._data << endl;
    cout << objc1._data << endl;
    cout << objc2._data << endl;
    testClass<unsigned int> objui;
    cout << objui._data << endl;
    objui._data=5;
    cout << objui._data << endl;
    return 0;
}

 

可以看到每个T不同,程序都申请了一个静态变量。

单纯写了一个template class并没有任何用,只有使用到testClass<int>时,编译器才会帮助生成class testClass<int>(类似于帮忙写了这段代码),由编译器编译这段代码才会申请变量。

一开始写的时候以为是由template class申请静态变量空间的,还觉得static T _data类型必须指定。

猜你喜欢

转载自www.cnblogs.com/Jacket-K/p/9261811.html