![]() |
#2
l2919204972017-06-13 14:02
|
对下面每条带标签的语句,解释发生了什么实例化(如果有的话),如果一个模板被实例化,解释为什么,
如果一个模板没有被实例化,解释为什么没有。
代码如下

template <typename T> class Stack { };
void f1(Stack<char>); // (a)
class Exercise {
Stack<double> &rsd; // (b)
Stack<int> si; // (c)
};
int main() {
Stack<char> *sc; // (d)
f1(*sc); // (e)
int iObj = sizeof(Stack< string >); // (f)
}
是不是这样的void f1(Stack<char>); // (a)
class Exercise {
Stack<double> &rsd; // (b)
Stack<int> si; // (c)
};
int main() {
Stack<char> *sc; // (d)
f1(*sc); // (e)
int iObj = sizeof(Stack< string >); // (f)
}
1. a, b和d没有实例化。
2. c, f只实例化了类, 没有实例化任何类成员
3. e, 实例化了Stack<char> 同时实例化了copy 构造函数
上面的答案经过测试得出的结论,
但是不知道原理是怎样的?
难道是依据是否分配内存为准? 如果是这样的话,c 和 f也没分配内存啊
求指教?
[此贴子已经被作者于2017-6-12 17:25编辑过]