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我只能接受一张照片……无论如何,非常感谢。:)