void print(const string& str){
cout << str <<endl;;
}
int main(){
print(string("asdf"));
}
我想我可以理解这种方式 创建了一个临时字符串对象,它通过引用传递给函数。参数str实际上与该临时字符串对象完全相同。
但如果我用print替换这个调用怎么样(&#34; asdf&#34;)? 在这种情况下究竟发生了什么? 我知道涉及隐式转换。但我不确定它何时以及如何完成? 我的意思是它是否也创建了一个临时字符串对象?
答案 0 :(得分:2)
您的理解是正确的。
在这种情况下究竟发生了什么?我知道涉及隐式转换。
完全相同的事情发生,但涉及隐式转换,而不是显式调用构造函数。
但我不确定何时以及如何完成?
引自cppreference:
只要在不接受该类型的上下文中使用某种类型T1的表达式,但接受其他类型T2
,就会执行隐式转换
我的意思是是否也创建了一个临时字符串对象?
是
答案 1 :(得分:1)
是的,因为string
的构造函数需要const char*
(string (const char* s)
),并且此构造函数未标记为explicit
,编译器将构建与您的问题中的代码相同的代码。