函数参数字符串按引用传递

时间:2016-06-24 09:58:38

标签: c++ pass-by-reference

void print(const string& str){
    cout << str <<endl;;
}

int main(){
    print(string("asdf"));
}

我想我可以理解这种方式 创建了一个临时字符串对象,它通过引用传递给函数。参数str实际上与该临时字符串对象完全相同。

但如果我用print替换这个调用怎么样(&#34; asdf&#34;)? 在这种情况下究竟发生了什么? 我知道涉及隐式转换。但我不确定它何时以及如何完成? 我的意思是它是否也创建了一个临时字符串对象?

2 个答案:

答案 0 :(得分:2)

您的理解是正确的。

  

在这种情况下究竟发生了什么?我知道涉及隐式转换。

完全相同的事情发生,但涉及隐式转换,而不是显式调用构造函数。

  

但我不确定何时以及如何完成?

引自cppreference

  

只要在不接受该类型的上下文中使用某种类型T1的表达式,但接受其他类型T2

,就会执行隐式转换
  

我的意思是是否也创建了一个临时字符串对象?

答案 1 :(得分:1)

是的,因为string的构造函数需要const char*string (const char* s)),并且此构造函数未标记为explicit,编译器将构建与您的问题中的代码相同的代码。