'非参考'类型的'非类型模板'参数有什么用?为什么这些参数也被视为'rvalues'?
template<int &n> void f(){
&n; // error
}
int main(){
int x = 0;
f<x>();
}
答案 0 :(得分:4)
f<x>
无效。顺便说一下,我的编译器编译你的模板化函数而没有坏的调用。
template<int &n> void f(){
int* ptr = &n;
}
int something = 0;
int main() {
f<something>(); // success
int x;
f<x>(); // C2971: Cannot pass local var to template function
}
答案 1 :(得分:0)
说实话,我想不出这种类型的构造有多大用处,虽然我确信它们可能存在。在我看来,你受到限制,因为n必须在全局范围内有效存在才能使f()有效。您可以执行以下操作:
#include <iostream>
using namespace std;
template<int &n> void sq(){
n *= n;
}
int something = 10;
int main()
{
cout << something << endl;
sq<something>();
cout << something << endl;
return 0;
}
但我无法看到使用非模板功能无法实现的功能。 sq()
可能会在编译时有效地计算出来吗?