为什么 C++ 中模板的大小是 1 字节?
Why is the size of a template 1 Byte in C++?
使用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)中,有没有编译成real type或者为什么只有1B?
模板是一条红鲱鱼。这是一个没有数据成员的结构,不管T
。由于 C++ 不允许 sizeof(anything)==0
,sizeof(intWrapper<int>)
必须大于 0。这使得大小 1 成为自然选择。
使用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)中,有没有编译成real type或者为什么只有1B?
模板是一条红鲱鱼。这是一个没有数据成员的结构,不管T
。由于 C++ 不允许 sizeof(anything)==0
,sizeof(intWrapper<int>)
必须大于 0。这使得大小 1 成为自然选择。