【发布时间】:2013-02-26 15:01:30
【问题描述】:
为什么 string::compare 返回 int 而不是像 short 或 char 这样的较小类型?我的理解是这个方法只返回-1、0或1。
第二部分,如果我要设计一个比较方法来比较Foo 类型的两个对象并且我只想返回-1、0 或1,那么使用short 或char 通常是个好主意?
编辑:我已得到更正,string::compare 不返回 -1、0 或 1,它实际上返回值 >0、
似乎答案是粗略的,没有理由返回小于 int 的类型,因为返回值是“右值”,而那些“右值”不会从小于 int 类型(4 字节)中受益.此外,许多人指出,大多数系统的寄存器可能会是int 的大小,因为无论你给它们一个 1、2 还是 4 字节值,这些寄存器都会被填充,没有真正的优势返回一个较小的值。
编辑 2:事实上,当使用较小的数据类型(如对齐、屏蔽等)时,看起来可能会有额外的处理开销。普遍的共识是,存在较小的数据类型是为了在处理大量数据时节省内存,就像数组的情况一样。
今天学到了一些东西,再次感谢大家!
【问题讨论】:
-
我认为如果有更具体的类型可以用于此,那会更好。一个只包含 Ada95 样式的 -1、0 和 1。
-
您链接到的
string::compare()的文档明确指出返回值是 0 -not- -1、0 和 1。 -
使用
short或char代替int有什么好处?大多数体系结构会将函数的返回值存储在寄存器中,int与short或char一样适合寄存器。并且将char用于数字类型总是一个坏主意,尤其是当您需要保证正确处理有符号值时。 -
Obvlious 船长,你的名字和评论……简直是无价之宝。
-
使用
char是个坏主意,因为在char未签名的平台上,如果返回值小于零,代码检查将失败。
标签: c++