这可能是一个愚蠢的问题,但我注意到在大量 API 中,许多采用不打算修改的整数参数的方法签名如下所示:
void method(int x);
而不是:
void method(const int &x);
对我来说,这两个似乎都会function一模一样。 (编辑:显然在某些情况下不是,请参阅 R Samuel Klatchko 的回答)在前者中,值被复制,因此无法更改原始值。在后者中,传递了一个常量引用,因此原始引用无法更改。
我想知道的是为什么一个比另一个更好 - 是因为性能与前者基本相同甚至更好吗?例如传递 16 位值或 32 位值而不是 32 位或 64 位地址?这是我能想到的唯一合乎逻辑的原因,我只是想知道这是否正确,如果不正确,为什么以及何时应该选择int x
over const int &x
反之亦然。
这不仅仅是传递指针的成本(这本质上就是引用),而且还包括在被调用方法的主体中取消引用以检索底层值。
这就是为什么通过int
按值实际上保证会更快(此外,编译器可以优化并简单地传递int
通过处理器寄存器,无需将其推入堆栈)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)