为什么string::compare
返回一个int
而不是较小的类型,例如short
or char
?我的理解是,此方法仅返回-1、0或1。
第二部分,如果我要设计一个比较两个类型的对象的比较方法,Foo
而我只想返回-1、0或1,那么使用short
或char
通常是一个好主意吗?
编辑:我已经得到纠正,string::compare
不返回-1、0或1,它实际上返回的值> 0,<0或0。感谢您一直陪伴我。
似乎答案很粗略,没有理由返回小于类型的类型,int
因为返回值是“ rvalues”,而这些“ rvalues”不会因为小于int类型(4个字节)而受益。此外,许多人指出,int
无论如何,大多数系统的寄存器可能都将具有一定的大小,因为无论您为它们提供1、2还是4字节的值,这些寄存器都将被填充,因此返回a并没有真正的优势。较小的值。
编辑2:实际上,当使用较小的数据类型(例如对齐,遮罩等)时,看起来可能会有额外的处理开销。通常的共识是,较小的数据类型在处理大量数据时会保留在内存中,例如数组的大小写。
今天学到了一些东西,再次感谢大家!
string::compare()
链接到明确规定返回值<0,0,> 0 -not- -1,0和1
short
或char
代替的好处是int
什么?大多数架构都会将函数的返回值存储在寄存器中,而int
a和a short
或都将适合寄存器char
。char
对于数字类型使用总是一个坏主意,尤其是当您需要确保正确处理带符号的值时。
char
将是一个坏主意,因为代码检查返回值是否小于零将在char
未签名的平台上失败。