参考的非类型模板参数

“非类型模板”参数的用途是什么?“参考”类型?为什么这些参数也被视为'rvalues'?
template<int &n> void f(){
   &n;               // error
}

int main(){
   int x = 0;
   f<x>();
}
    
已邀请:
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
}
    
说实话,我不能想到这种类型的构造有多大用处,尽管我确信它们可能存在。在我看来,你受到限制,因为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()
会在编译时有效计算吗?     

要回复问题请先登录注册