const-correctness是否与短内联函数有关?

时间:2012-06-13 21:05:19

标签: c++ inline const-correctness

我写过两个简短的测试,并用“g ++ -S”(Arch Linux上的gcc 4.7版)编译:

test1.cpp

inline int func(int a, int b) {
    return a+b;
}

int main() {
    int c = func(5,5);
    return 0;
}

测试2.cpp

inline int func(const int& a, const int& b) {
    return a+b;
}

int main() {
    int c = func(5,5);
    return 0;
}

diff test1.s test2.s

1,5c1,5
<   .file   "test1.cpp"
<   .section    .text._Z4funcii,"axG",@progbits,_Z4funcii,comdat
<   .weak   _Z4funcii
<   .type   _Z4funcii, @function
< _Z4funcii:
---
>   .file   "test2.cpp"
>   .section    .text._Z4funcRKiS0_,"axG",@progbits,_Z4funcRKiS0_,comdat
>   .weak   _Z4funcRKiS0_
>   .type   _Z4funcRKiS0_, @function
> _Z4funcRKiS0_:
12a13,14
>   movl    8(%ebp), %eax
>   movl    (%eax), %edx
14c16
<   movl    8(%ebp), %edx
---
>   movl    (%eax), %eax
22c24
<   .size   _Z4funcii, .-_Z4funcii
---
>   .size   _Z4funcRKiS0_, .-_Z4funcRKiS0_
36,38c38,44
<   movl    $5, 4(%esp)
<   movl    $5, (%esp)
<   call    _Z4funcii
---
>   movl    $5, 20(%esp)
>   movl    $5, 24(%esp)
>   leal    20(%esp), %eax
>   movl    %eax, 4(%esp)
>   leal    24(%esp), %eax
>   movl    %eax, (%esp)
>   call    _Z4funcRKiS0_

但是,我真的不知道如何解释结果。我只看到test2显然产生了更长的代码,但我无法确定它们之间存在什么差异。

后续问题:成员函数是否重要?

2 个答案:

答案 0 :(得分:4)

这些函数不等价,一个按值引用参数,另一个按引用引用。请注意,如果您删除引用&,那么您将使用完全相同的函数,除了强制您不更改​​复制参数的值而另一个不更改。

答案 1 :(得分:4)

const正确性适用于人类,而不适用于代码生成

通过引入可以改变的限制

,人类更容易理解代码

所以,是的,它对于短函数也很重要,因为它们可以从代码中调用,而不是简单易懂,一目了然

说,你的示例函数没有说明const正确性

所以,虽然这回答了字面上的问题,但可能你误解了const正确性是什么,并且想要问一些其他问题,我将不会猜测