【发布时间】:2018-04-11 11:50:51
【问题描述】:
我仍然对元编程有基本的了解。
当使用 int 类型或 size_t 类型作为模板类型时,我很难理解使用 int 类型或 size_t 类型的区别。
我了解标准 c++ 编程中两者之间的区别,如此处所述What's the difference between size_t and int in C++?
然后在阅读与一些模板技巧相关的问题时,似乎人们倾向于无差别地使用它们。 例如在这个How can I get the index of a type in a variadic class template? Barry 正在使用用 size_t 类型实例化的 std::integral_constant
在这个问题中:C++11 Tagged Tuple ecatmur 提供了一个答案,它的索引助手使用 std::integral 的 int 类型实例。
修改一个与另一个似乎对我测试的内容没有影响。这些模板专业化是递归的,无论如何我认为如果索引 N 太大,编译器实际上会崩溃。
在这个特定的上下文中选择 int 或 size_t 只是编码风格的问题吗?
【问题讨论】:
-
混合使用可能会有问题。
-
您的意思是除了
int是有符号整数而size_t是无符号整数之外?或者代码读者看到的语义含义,例如size_t并且知道 size 是预期的吗? -
@Some 程序员老兄:是的,据我了解,使用 int 可能更受约定驱动(如果存在这样的约定),int 是定义索引的“足够好”类型(或至少被广泛使用)并且 size_t 在编程上更好,因为它降低了错误使用的风险。但在这种观点下,unsigned short 或 unsigned char 会更好,因为编译时递归算法在实践中必须用小的 N 值调用。