C++ 函数模板重载
考虑以下程序C++ 函数模板重载,c++,C++,考虑以下程序 #include <iostream> using namespace std; int sum (int & a, int & b) { cout <<" NOn template function "<<endl; return a+b; } template <typename T> int sum ( const T & a, const T & b) { cout<<
#include <iostream>
using namespace std;
int sum (int & a, int & b)
{
cout <<" NOn template function "<<endl;
return a+b;
}
template <typename T>
int sum ( const T & a, const T & b)
{
cout<<"Template Generated .."<<endl;
return a+b;
};
int main(int argc, char ** argv)
{
cout <<sum(10,20)<<endl;;
}
#包括
使用名称空间std;
整数和(整数和a、整数和b)
{
库特
我希望调用非模板函数的sum()
您正在传递无法绑定到非常量引用的右值。因此选择了模板版本
将int&
更改为int const&
或int
,将选择第一个版本:
- 它使用
int常量&
- 它使用
int
希望有帮助
我希望调用非模板函数的sum()
您正在传递无法绑定到非常量引用的右值。因此选择了模板版本
将int&
更改为int const&
或int
,将选择第一个版本:
- 它使用
int常量&
- 它使用
int
希望有帮助。问题是int&
无法绑定到临时版本,因此无法使用非模板版本。这与执行int&i=10;
相同,这是不允许的
10
和20
为PR值(3.10):
prvalue(“纯”右值)是不是xvalue的右值[
示例:调用返回类型不是
引用是prvalue。文本的值,如12、7.3e5或
true也是一个prvalue。-结束示例]
问题是int&
无法绑定到临时版本,因此无法使用非模板版本。这与执行int&i=10;
相同,这是不允许的
10
和20
为PR值(3.10):
prvalue(“纯”右值)是不是xvalue的右值[
示例:调用返回类型不是
引用是prvalue。文本的值,如12、7.3e5或
true也是一个prvalue。-结束示例]
模板
总和(常数T&a、常数T&b)
{
cout模板
总和(常数T&a、常数T&b)
{
谢谢杰西。回答得很好。谢谢杰西。谢谢纳瓦兹,我在等你的回答。谢谢纳瓦兹,我在等你的回答。
template <typename T>
T sum ( const T & a, const T & b)
{
cout<<"Template Generated .."<<endl;
return a+b;
};