Artificial intelligent assistant

c++中函数参数里,是否能用 const reference 的地方尽量都用?在能用 const reference 的地方都用 const reference,这样做会有什么坑吗?

在 const reference 替代值的情况下,如果不考虑性能,可以尽量都用。考虑性能的话, **部分情况** 使用值传递性能更高。因此建议采用值传递。

为什么对于小数据来说,应该用值传递呢?因为值传递可以全部塞进寄存器,而引用传递意味着必然有一次无法优化掉的内存访问寻址,对于现代CPU以及现代编译器来说,能全进寄存器的操作肯定是最高效率。

具体多少数据算小数据呢?取决于你的编译器支持的CPU体系,以及目标CPU架构,总共支持放多少参数进寄存器。你需要对你的目标机器测试才知道。一般而言,如果所有参数的长度加起来在四个机器字长以内,可以算作小数据,建议值传递,反之则建议引用传递。

但如果你问的是 const reference 能不能取代非 const 的 reference ,那如果参数指定为
reference,则必须传递一个变量作为参数。但如果参数指定为 const reference,就可以允许使用常量或者文字量作为参数。因此 const
reference 适用场景更广一些。

总的来说:

* 如果你是在考虑用普通引用vs常量引用,那么只要可能,就应该用常量引用。
* 如果你是在考虑用值传递vs常量引用,那么只要数据尺寸够小,建议用值传递。

mx6-aJIcxzdXS5dXLMu_lkUnPT2gXNErQouQ5AxEulg b3a7a4056772240d98922fa5d82524c4