【问题标题】:function parameter string pass by reference函数参数字符串通过引用传递
【发布时间】:2016-10-26 21:51:37
【问题描述】:
void print(const string& str){
    cout << str <<endl;;
}

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

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

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

【问题讨论】:

  • 同样的事情将被隐式完成。

标签: c++ pass-by-reference


【解决方案1】:

是的,因为 string 具有采用 const char* (string (const char* s)) 的构造函数,并且此构造函数未标记为 explicit,编译器将构建与您问题中的代码等效的代码。

【讨论】:

    【解决方案2】:

    你的理解是正确的。

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

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


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

    引用cppreference:

    只要在不接受该类型但接受其他类型 T2 的上下文中使用某种类型 T1 的表达式时,就会执行隐式转换


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

    是的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 2011-07-08
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多