我听说过C++模板上下文中的代码膨胀.我知道现代C++编译器并非如此.但是,我想构建一个例子并说服自己.
让我们说我们上课了
template< typename T, size_t N >
class Array {
public:
T * data();
private:
T elems_[ N ];
};
template< typename T, size_t N >
T * Array<T>::data() {
return elems_;
}
Run Code Online (Sandbox Code Playgroud)
而且,假设types.h包含
typedef Array< int, 100 > MyArray;
Run Code Online (Sandbox Code Playgroud)
x.cpp 包含
MyArray ArrayX;
Run Code Online (Sandbox Code Playgroud)
并y.cpp包含
MyArray ArrayY;
Run Code Online (Sandbox Code Playgroud)
现在,我如何可以验证的代码空间MyArray::data()是相同的两个ArrayX和ArrayY?
还有什么我应该知道并从这个(或其他类似的简单)例子中验证?如果有任何g ++特定提示,我也对此感兴趣.
PS:关于臃肿,我甚至担心最轻微的臃肿,因为我来自嵌入式环境.
另外:如果模板类被显式实例化,情况是否会发生变化?
我有一个C++模板类,它使用3个不同的类型参数进行实例化.有一种方法,类只需要对这些类型中的一种进行处理,而且不会使用其他两种类型进行调用.
是否会生成该方法的对象代码三次(对于实例化模板的所有类型),或者只生成一次对象代码(对于实际使用它的类型)?