如以下程序所示:当我尝试使用对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;
}
答案 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&
对其进行分配。