什么时候使用size_t作为模板函数的参数是个坏主意?我知道size_t是一个unsigned int,但我的教授在课堂上提到使用size_t作为模板类的参数是不好的。有什么想法吗?
答案 0 :(得分:9)
使用size_t
作为模板参数没有任何问题。
使用任何类型作为模板参数没有任何问题。
答案 1 :(得分:1)
我能想到的唯一原因是size_t在32位和64位中的大小不同。如果您在某种序列化模板函数中使用它,则以32位代码序列化的数据将与您的64位代码不兼容。这更像是序列化size_t的问题,而不是真正特定于模板的问题。如果你问你的教授,我有兴趣听听他说的话!
答案 2 :(得分:1)
按照您的意愿解释,但在编写size_t
和Win32 API中的许多其他函数时,TCC和GCC不会悄悄地接受unsigned int
或ReadFile()
。如果被指示的话,它必须是DWORD
。没有例外。 API引用使得这一点非常明确,否则编码很快就会告诉您它们的含义。做任何不同的事情,你也要做各种丑陋的演员。
我觉得奇怪的是,我接受了那些我认为比我更了解的人们对size_t的倡导。 (一般来说,大多数人都是编码员!)他们主张“便携性”的原因。奇怪的是,在决定什么是“便携式”时,他们没有考虑与Win32 API的兼容性。
事后看来,我自己的看法是不允许这样的人向你讲授类型。由于上面给出的'QuestionC'的非常简短的答案表明,任何类型都可能有效。当然,重点是定义,意思是,我们应该知道我们选择什么,为什么。通常有更多的理由来确定与某些主机匹配的代码的适当方法,例如程序的用途。没有类型,没有编译器,可以做好充分的准备来做出这些决定。那是我们的工作。上下文就是一切,只要根据不知道我们正在做什么的人的建议选择变量类型,认为最终兼容性或可移植性是可能的是愚蠢的。网络越是打破越来越多的浏览器和网站,那就更加明显了。
为了“便携性”原因而发明另一个“类型”最终有意义,因为订购“一个环来绑定它们”。