相关疑难解决方法(0)

C++模板:说服自己反对代码膨胀

我听说过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()是相同的两个ArrayXArrayY

还有什么我应该知道并从这个(或其他类似的简单)例子中验证?如果有任何g ++特定提示,我也对此感兴趣.

PS:关于臃肿,我甚至担心最轻微的臃肿,因为我来自嵌入式环境.


另外:如果模板类被显式实例化,情况是否会发生变化?

c++ compiler-construction templates g++

14
推荐指数
4
解决办法
8220
查看次数

是否为未使用的模板类方法生成了对象代码?

我有一个C++模板类,它使用3个不同的类型参数进行实例化.有一种方法,类只需要对这些类型中的一种进行处理,而且不会使用其他两种类型进行调用.

是否会生成该方法的对象代码三次(对于实例化模板的所有类型),或者只生成一次对象代码(对于实际使用它的类型)?

c++ templates footprint

12
推荐指数
1
解决办法
1919
查看次数

标签 统计

c++ ×2

templates ×2

compiler-construction ×1

footprint ×1

g++ ×1