为什么我不能将局部变量引用为非类型模板参数?

时间:2014-09-30 22:50:21

标签: c++ templates

我不明白为什么会这样:

#include <iostream>

template<int& obj>
void foo() { obj = 42; }

int i;

int main()
{
    foo<i>();
    std::cout << i;
}

那不是:

#include <iostream>

template<int& obj>
void foo() { obj = 42; }

int main()
{
    int i;
    foo<i>();
    std::cout << i;
}
//error: the value of 'i' is not usable in a constant expression

1 个答案:

答案 0 :(得分:2)

局部变量的地址是运行时功能,静态变量的地址是编译时功能。