【发布时间】:2011-01-30 09:31:16
【问题描述】:
foo和bar有区别吗:
class A
{
Object __o;
void foo(Object& o)
{
__o = o;
}
void bar(Object o)
{
__o = o;
}
}
据我了解, foo 在调用对象 o 时不会对它执行复制操作,而对分配执行一次复制操作。 Bar 在被调用时对对象 o 执行一个复制操作,另一个用于赋值。所以我或多或少可以说 foo 使用的内存比 bar 少 2 倍(如果 o 足够大的话)。对吗?
编译器是否可以优化 bar 函数以仅对 o 执行一次复制操作?即使 __o 指向参数 o 的本地副本而不是创建新副本?
【问题讨论】:
-
在一个不相关的注释上:阅读这个:stackoverflow.com/questions/228783/…
-
只是一个预防措施:您不应该依赖任何类型的优化(不)发生。设计您的签名,使其表达您想要实现的语义。
-
+1 强调表现力
-
哎呀,不只是一个下划线,而是两个?您是否试图引起名称冲突? 永远不要在 C++ 中创建包含双下划线的名称
标签: c++ reference variable-assignment