c++ - 在 C++ 中返回引用

标签 c++ reference

<分区>

考虑以下代码,我在其中返回 double&string&。它在 double 的情况下工作正常,但在字符串的情况下则不然。为什么行为不同?

两种情况下,编译器甚至不会抛出 Warning: returning address of local variable or temporary 因为我正在返回一个引用。

#include <iostream>
#include <string>
using namespace std;


double &getDouble(){
    double h = 46.5;
    double &refD = h;
    return refD;
}

string &getString(){
    string str = "Devil Jin";
    string &refStr = str;
    return refStr;
}

int main(){
    double d = getDouble();
    cout << "Double = " << d << endl;

    string str = getString();
    cout << "String = " << str.c_str() << endl;

    return 0;
}

Output:

$ ./a.exe
Double = 46.5
String =

最佳答案

无论编译器做什么或不做什么,您都不应该返回对局部变量的引用。编译器可能很容易被愚弄。您不应将代码的正确性建立在某些可能未触发的警告之上。

它在这里没有触发的原因可能是您没有真正返回对局部变量的引用,而是返回一个引用局部变量的变量。编译器可能不会检测到这种稍微复杂一些的情况。它只检测如下内容:

string &getString(){
    string str = "Devil Jin";
    return str;
}

double 的情况更简单,因为它不涉及构造和破坏复杂的对象,所以在这种情况下,编译器的流控制分析可能在检测错误方面做得更好。

关于c++ - 在 C++ 中返回引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2612598/

相关文章:

javascript - 在 JavaScript 中,有没有什么方法可以将数组的元素传递给函数而不传递整个数组?

c++ - 定义类时对类的 undefined reference

c++ - 为什么在调用成员函数时 std::reference_wrapper 不隐式转换为引用?

javascript - 尝试通过 JS 和 Jquery 将文本引入 html 模板时,浏览器中出现 "undefined"

c++ - QLineEdit 问题

c++ - 仅设置 1 位的整数检测优化

c++ - pdCurses 在 Windows 中使用,与 3 个 gcc 宏混淆

c++ - sort() 函数中的赋值操作

c++ - 由于地址错误导致执行失败

reference - 为什么 find 闭包的参数需要两个 & 符号?