【发布时间】:2010-12-29 18:48:30
【问题描述】:
void outputString(const string &ss) {
cout << "outputString(const string& ) " + ss << endl;
}
int main(void) {
outputString("constant tranformed to reference argument");
//! outputString(new string("abc")); new only return pointer to object
return 0;
}
既然禁止创建临时对象引用转换为方法,这种语法应该是没用的,反而会让事情变得更加混乱。那么C++为什么要费心支持这种语法呢?
编辑:说实话,我没看懂你的表述。考虑到上面的例子,我们通常会使用void outputString(const string ss)而不是void outputString(const string &ss)。我认为正常的事情是'通过“按值”方法处理常量/变量,而“按引用传递”方法只处理变量。我们应该使用const type-id & 而不是const type-id 处理常量的唯一原因是效率,因为“按引用传递”方法只采用原始常量/对象变量的指针(地址),但“按值传递”方法需要进行复制。
谢谢。
【问题讨论】:
-
你对价值传递的看法是完全错误的。通过 const 引用传递是 C++ 首选的处理方式,除了 int 和 double 等“内置”类型。
-
如果您认为按值传递是常态,我建议您查看任何规模合理的 C++ 项目的代码。
-
您应该通过值传递一个重要对象的唯一时间是您希望函数始终在副本上工作。即使这样,通常最好还是通过引用传递,然后在函数定义中创建一个工作副本。
-
@Mike DeSimone 为什么它通常更好?如果您通过值传递,如果它来自右值,则编译器可能会完全忽略副本
标签: c++ reference pass-by-reference temporary-objects