【发布时间】:2014-02-14 11:37:08
【问题描述】:
考虑以下代码:
void consumeString(std::string str){
/* some code */
}
void passStringObject(){
std::string stringObject = "string literal";
consumeString(stringObject);
}
void passStringLiteral(){
consumeString("string literal");
}
现在考虑以下两种情况:
1) 函数passStringObject()被调用。
2) 函数passStringLiteral()被调用。
在情况 1 中,我假设 - 当在 passStringObject 中调用函数 consumeString 时 - 变量 stringObject 只是传递给函数 consumeString 和(因为按值调用)复制构造函数调用 string 类的参数,以便参数 str 是变量 stringObject 的副本,该变量已传递给函数 consumeString。
但是当函数consumeString 被调用时,情况2 会发生什么?在调用复制构造函数并将“隐藏”变量的值复制到参数str之前,是否隐式调用了字符串类的(重载)赋值运算符(可能将文字分配给后台的某个“隐藏”变量?) ?
【问题讨论】:
-
将创建一个临时的
std::string实例并在情况2中使用
标签: c++ string call-by-value