Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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++_C++11_Rvalue Reference_Overloading_Function Templates - Fatal编程技术网

C++ 使用模板重载函数

C++ 使用模板重载函数,c++,c++11,rvalue-reference,overloading,function-templates,C++,C++11,Rvalue Reference,Overloading,Function Templates,我有以下代码 #include <iostream> using namespace std; void print(int& number){ cout<<"\nIn Lvalue\n"; } void print(int&& number){ cout<<"\nIn Rvalue\n"; } int main(int argc,char** argv){ int n=10; print(n)

我有以下代码

#include <iostream>
using namespace std;


void print(int& number){
    cout<<"\nIn Lvalue\n";
}

void print(int&& number){
    cout<<"\nIn Rvalue\n";
}

int main(int argc,char** argv){

    int n=10;
    print(n);
    print(20);
}
#包括
使用名称空间std;
无效打印(整数和数字){

cout除非您想更改输入参数,否则
const
左值引用将执行此操作,因为右值引用可以绑定到
const
左值引用:

void print(int const &number) {
    ...
}

不过,你可以:

template<typename T>
void print(T &&number) {
    ...
}
模板
无效打印(T和编号){
...
}

这非常有效。但是如果我想要两个saperate打印函数呢?或者这是一件愚蠢的事情吗?如果你想要两个单独的打印函数,那么你应该像你的例子中那样有两个重载。但是,从实际的角度来看,如果你只想打印(即,不改变输入参数)我想用两个SabATE模板来打印一个带有T& &其他的T&&但是它不工作。YAAP,模板不能工作,因为编译器会因为某些C++标准规则无法区分这两个重载。ess我只能接受一张照片……无论如何,非常感谢。:)