【发布时间】:2010-06-09 20:12:51
【问题描述】:
这可能是一个愚蠢的问题,但我注意到在大量 API 中,许多采用不打算修改的整数参数的方法签名看起来像:
void method(int x);
而不是:
void method(const int &x);
在我看来,这两者的功能似乎完全相同。 (编辑:在某些情况下显然不是,请参阅 R Samuel Klatchko 的回答)在前者中,该值被复制,因此无法更改原始值。在后者中,传递了一个常量引用,所以不能改变原来的。
我想知道的是为什么一个优于另一个 - 是因为性能与前者基本相同甚至更好吗?例如传递 16 位值或 32 位值而不是 32 位或 64 位地址?这是我能想到的唯一合乎逻辑的原因,我只想知道这是否正确,如果不正确,为什么以及何时应该更喜欢 int x 而不是 const int &x,反之亦然。
【问题讨论】:
-
所有很好的答案,谢谢大家。因此,作为一般规则,您会将副本传递给 byte/int/bool 等原始类型,并对其他所有内容(类/结构)使用指针和引用? @Jen 我会接受你的回答,因为你是第一个。
-
是的,这是一般规则,除非有充分的理由不遵守它。例如,如果您要对非原始参数做的第一件事是制作本地副本,以便您可以在不影响调用站点的情况下对其进行修改,那么您不妨按值获取参数。
标签: c++