C++ 写foo(constfloat&;)是浪费精力吗?
当传递诸如int或float之类的基本类型时,编写这样的内容是否浪费了精力:C++ 写foo(constfloat&;)是浪费精力吗?,c++,C++,当传递诸如int或float之类的基本类型时,编写这样的内容是否浪费了精力: foo(const float&); 而不仅仅是通过值传递: foo(float); 花车 这里没有什么好处:float很小,复制速度不会比创建指针来实现引用慢。当传递float之类的基元类型时,按常量引用传递没有任何帮助。按值传递完成了几乎相同的事情-对参数值所做的任何更改都不会影响调用函数中的值(如果按值调用)-不能对参数进行任何更改(如果按常量引用调用) 然而,对于类,传递const类引用要比通过值传
foo(const float&);
而不仅仅是通过值传递:
foo(float);
花车
这里没有什么好处:float很小,复制速度不会比创建指针来实现引用慢。当传递float之类的基元类型时,按常量引用传递没有任何帮助。按值传递完成了几乎相同的事情-对参数值所做的任何更改都不会影响调用函数中的值(如果按值调用)-不能对参数进行任何更改(如果按常量引用调用)
然而,对于类,传递const类引用要比通过值传递(必须复制对象)有效得多。这取决于引用的实现。根据标准(§8.3.2/4): 未指定引用是否需要存储(3.7) 理论上,引用可以将您从
float
的副本中解救出来。当然,如果引用被实现为指针,那么这将是徒劳的。因此,答案取决于实现
大多数时候,这种微观优化没有多大意义。我非常怀疑应用程序的瓶颈在于
float
请记住,在某些情况下,传递值可能实现更广泛的编译器优化。Chandler Carruth(来自Clang fame)谈到了优化编译器在处理引用/指向对象的指针时所面临的一些困难。