问题描述
使用using
,可以定义类型的别名,并且该类型的单元具有与原始实例(1)相同的大小。然而,模板只有 1 个字节 (2) 的权重。
using aliasOfInt = int;
template<typename T>
struct intWrapper {
using wrappedaliasOfInt = T;
};
int main() {
// (1) --> 4B
std::cout << "sizeof(aliasOfInt) = " << sizeof(aliasOfInt) << std::endl;
// (2) --> 1B
std::cout << "sizeof(intAliasWrapper) = " << sizeof(intWrapper<int>) << std::endl;
}
在(2)中,是否编译了一个真正的类型或者为什么只有1B?
解决方法
模板是一条红鲱鱼。它是一个没有数据成员的结构,与 T
无关。由于 C++ 不允许 sizeof(anything)==0
,因此 sizeof(intWrapper<int>)
必须大于 0。这使得大小 1 成为自然选择。