在一个项目中,我维持,我看到很多的这样的代码为简单get / set方法

const int & MyClass::getFoo() { return m_foo; }

void MyClass::setFoo(const int & foo) { m_foo = foo; }

这是在这样做,而不是点以下?

int MyClass::getFoo() { return m_foo; }  // Removed 'const' and '&' 

void MyClass::setFoo(const int foo) { m_foo = foo; }  // Removed '&'

传递一个参照本发明的原语类型应该需要相同的(或更多)的努力作为传递类型的值本身,是吗?结果 这只是一个数字毕竟...点击 这只是一些尝试微优化还是有真正的好处?

有帮助吗?

解决方案

不同的是,如果你得到这一结果为参考自己,你可以跟踪自己的变量名整数成员变量的变化,而不召回的功能。

const &int x = myObject.getFoo();
cout<<x<<endl;
//...
cout<<x<<endl;//x might have changed

这可能不是最好的设计选择,这是非常危险的返回引用(const或没有),在情况下会从范围释放返回的变量。所以,如果你返回一个引用,要小心,以确保它是不是超出范围的变量。

有对于修改略有差别太大,但同样可能不是一件值得做的事情,或者是打算。

void test1(int x)
{
  cout<<x<<endl;//prints 1
}

void test2(const int &x)
{
  cout<<x<<endl;//prints 1 or something else possibly, another thread could have changed x
}

int main(int argc, char**argv)
{
  int x = 1;
  test1(x);
  //...
  test2(x);
  return 0;
}

因此,最终的结果是,你获得变化参数被传递甚至之后。

其他提示

要我,传递 const引用为基元是错误的。要么需要修改的值,在这种情况下传递一非const引用,或只需访问该值和在这种情况下传递一常量

常数引用应仅被用于复杂的类中,当复制对象可能是一个性能问题。在原语的情况下,除非需要修改该变量的值不应传递一个参考。其原因是的引用的需要更多的计算时间比的非引用的,因为用的引用的,程序需要来查找表中查找在地址的对象。当这种查找时间比复制时间短,参考文献是一种改进。

通常,整数地址具有低级别的实现相同的字节长度。所以复制时的 INT 作为一个函数的返回值等效于复制一个地址的时间。但在情况下的 INT 被返回,不执行的查找,因此性能提高。

返回一个值,并返回一个const参考之间的主要区别在于,可以随后的const_cast该引用和改变该值。

这是不好的设计,并试图建立一个聪明的设计,其中容易和简洁的设计将是绰绰有余的例子。而不是只返回一个值的作者使得代码读者认为他可能有什么用意。

没有太多益处。我已经在框架看到了这一点或宏之前生成的getter和setter方法。宏代码没有原始的和非POD类型和全线只是用来const type&用于制定者之间进行区分。我怀疑这是一个效率问题,或者一个真正的误解;机会是这是一个一致性问题。

我觉得谁误解了引用的概念和使用它的一切,包括原始数据类型这种类型的代码被写入。我也看到了一些这样的代码并不能看到这样做的任何好处。

有没有点和益处除了

void MyClass::setFoo(const int foo)
void MyClass::setFoo(const int& foo)

如,那么你将不能够再使用“富”变量“内setFoo”实现。而且我相信,“廉政&”只是因为盖伊只是习惯用const引用传递所有的事情并没有什么不妥。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top