如何在模板函数中传递文字
How literal are passed in template function
#include <iostream>
using namespace std;
template <typename T>
void fun(const T& x)
{
static int i = 10;
cout << ++i;
return;
}
int main()
{
fun<int>(1); // prints 11
cout << endl;
fun<int>(2); // prints 12
cout << endl;
fun<double>(1.1); // prints 11
cout << endl;
getchar();
return 0;
}
output : 11
12
11
常量字面量是如何在fun < int >(1)这样的函数中直接作为引用传递而不报编译错误的?与普通数据类型函数调用不同
#include<iostream>
using namespace std;
void foo (int& a){
cout<<"inside foo\n";
}
int main()
{
foo(1);
return 0;
}
它给我编译错误:
prog.cpp: In function 'int main()':
prog.cpp:12:8: error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'
foo(1);
^
prog.cpp:4:6: note: in passing argument 1 of 'void foo(int&)'
void foo (int& a){
^
请任何人解释一下常量文字是如何在模板函数中传递的。我认为可能是临时对象形成而不是函数调用发生但不确定
这与模板无关。问题是一个函数接受 const int&
而另一个接受 int&
.
非常量左值引用不能绑定到右值(例如文字),这就是为什么在第二种情况下会出现编译错误的原因。
#include <iostream>
using namespace std;
template <typename T>
void fun(const T& x)
{
static int i = 10;
cout << ++i;
return;
}
int main()
{
fun<int>(1); // prints 11
cout << endl;
fun<int>(2); // prints 12
cout << endl;
fun<double>(1.1); // prints 11
cout << endl;
getchar();
return 0;
}
output : 11
12
11
常量字面量是如何在fun < int >(1)这样的函数中直接作为引用传递而不报编译错误的?与普通数据类型函数调用不同
#include<iostream>
using namespace std;
void foo (int& a){
cout<<"inside foo\n";
}
int main()
{
foo(1);
return 0;
}
它给我编译错误:
prog.cpp: In function 'int main()':
prog.cpp:12:8: error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'
foo(1);
^
prog.cpp:4:6: note: in passing argument 1 of 'void foo(int&)'
void foo (int& a){
^
请任何人解释一下常量文字是如何在模板函数中传递的。我认为可能是临时对象形成而不是函数调用发生但不确定
这与模板无关。问题是一个函数接受 const int&
而另一个接受 int&
.
非常量左值引用不能绑定到右值(例如文字),这就是为什么在第二种情况下会出现编译错误的原因。