2016-06-24 78 views
1
void print(const string& str){ 
    cout << str <<endl;; 
} 

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

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

但怎么样,如果我更换打印(“ASDF”)的调用;? 在这种情况下究竟发生了什么? 我知道涉及隐式转换。但我不确定何时以及如何完成? 我的意思是它有创建,以及一个临时的字符串对象?

+4

同样的事情也会被隐式进行。 – songyuanyao

回答

2

你的理解是正确的。

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

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


但我不知道什么时候,它是如何做的?

cppreference引用:执行

隐式转换每当某种类型T1的表达在上下文中,不接受该类型被使用,但接受一些其它类型的T2


我的意思是它有创建,以及一个临时的字符串对象?

是的。

1

是的,因为string具有构造这需要const char*string (const char* s)),并且此构造没有标记explicit,编译器将建立代码等同于你的问题。