为什么常量引用变量不能分配给引用变量,但函数可以呢?

时间:2018-09-21 16:03:38

标签: c++

如以下程序所示:当我尝试使用对int的常量引用来初始化对int的引用时,编译器将其视为错误。这很容易理解,因为它防止潜在地修改正确的值。

但是,我不太理解为什么我可以分配一个返回值是常量引用的函数的原因。

#include <iostream>
#include <string>
using namespace std;
const string & version2(string & s1, const string & s2); // has side effect

int main()
{
    string input;
    string result;
    int a = 10;
    const int &c = a;
    int &d = c;  // warning here

    cout << "Enter a string: ";
    getline(cin, input);
    cout << "Your string as entered: " << input << endl;
    result = version2(input, "***");  // why no warning here?
    cout << "Your string enhanced: " << result << endl;

    std::cin.get();
    std::cin.get();
    return 0;
}


const string & version2(string & s1, const string & s2) // has side effect
{
    s1 = s2 + s1 + s2;
    // safe to return reference passed to function
    return s1;
} 

1 个答案:

答案 0 :(得分:1)

函数的返回类型为const&return语句中使用的变量是非const变量。

这没有错。这类似于您在main中发布的代码中的内容。

int a = 10;           // A non-const variable
const int &c = a;     // A const reference that references the non-const variable.

关于

result = version2(input, "***");  // why no warning here?

这没错,因为您可以初始化非const变量并使用const&对其进行分配。