Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';我是否从该模板函数返回引用?_C++_Templates_Reference_Return Type - Fatal编程技术网

C++ 为什么可以';我是否从该模板函数返回引用?

C++ 为什么可以';我是否从该模板函数返回引用?,c++,templates,reference,return-type,C++,Templates,Reference,Return Type,我直接从一本书()中选取了这个例子: //获取两个值的最大值 模板 objectType和GetMax(常量objectType和value1、常量objectType和value2) { 如果(值1>值2) 返回值1; 其他的 返回值2; } 本质上,它是一个非常详细的模板函数,用于查找任何类型的2个值之间的最大值 我尝试按如下方式使用该函数: // Test the Max function int x_int = 25; int y_int = 40; int max_int = Get

我直接从一本书()中选取了这个例子:

//获取两个值的最大值
模板
objectType和GetMax(常量objectType和value1、常量objectType和value2)
{
如果(值1>值2)
返回值1;
其他的
返回值2;
}
本质上,它是一个非常详细的模板函数,用于查找任何类型的2个值之间的最大值

我尝试按如下方式使用该函数:

// Test the Max function
int x_int = 25;
int y_int = 40;
int max_int = GetMax(x_int, y_int);
cout << "max_int: " << max_int << endl;

double x_double = 1.1;
double y_double = 1.001;
double max_double = GetMax(x_double, y_double);
cout << "max_double: " << max_double << endl;
//测试Max函数
int x_int=25;
int y_int=40;
int max_int=GetMax(x_int,y_int);

这个错误解释了一切,您不能将非常量引用返回常量引用

// Get the maximum of two values
template <typename objectType>
const objectType& GetMax(const objectType& value1, const objectType& value2)
{
    if (value1 > value2)
        return value1;
    else
        return value2;
}
//获取两个值的最大值
模板
const objectType和GetMax(const objectType和value1、const objectType和value2)
{
如果(值1>值2)
返回值1;
其他的
返回值2;
}

这里的问题是参数声明的
常量部分。变量
value1
value2
是对常量值的引用,但您返回对非常量值的引用。

您应该指出错误所指的行(以及发布一个完整的程序,其他人可以将其复制/粘贴到编辑器中)

但我希望他们会参考这一行

return value1;
还有后面的那个。错误会准确地告诉您出了什么问题:

cannot convert from 'const int' to 'int &'
果然,如果我们仔细研究这一行要做的事情,就会发现您要返回的是const:

const objectType& value1
但函数承诺返回的类型是非成本引用:

objectType& GetMax

函数
GetMax
的返回类型是引用,但您试图返回的变量是
const
引用

// Get the maximum of two values
template <typename objectType>
const objectType& GetMax(const objectType& value1, const objectType& value2)
{
    if (value1 > value2)
        return value1;
    else
        return value2;
}
这是不允许的,编译失败

试图在
value1
value2
上使用
const\u cast
规避此机制是危险的,因为从最初的
const
值中丢弃
const的行为是未定义的


显然要做的事情是将
GetMax
的返回类型更改为
const
引用。

您应该返回一个
const&
就是这样!奇怪的是,在我添加了“const”之后,VisualStudio决定在它下面加上红色下划线约10秒,这让我觉得这是一个错误,尽管它不是。。。掌纹
// Get the maximum of two values
template <typename objectType>
const objectType& GetMax(const objectType& value1, const objectType& value2)
{
    if (value1 > value2)
        return value1;
    else
        return value2;
}