今天,有人向我展示了以下形式的代码:
#include <iostream>
namespace example {
template <typename T>
T variable_template = T(42);
}
int main() {
example::variable_template<int> = 10;
std::cout << example::variable_template<int> << std::endl;
}
你可以在这里看到它运行:http: //coliru.stacked-crooked.com/a/3a786c42b5204b0a
我预计此代码将打印 42,因为 10 似乎分配给了一个临时的。在命名空间内,模板只有一个声明(不是实例化),因此在命名空间内没有数据可以改变。尽管如此,它还是让我感到惊讶并打印了 10 个。
我本来也希望对临时分配的警告发出警告,但这也没有发生。
这是未定义的行为,是我对模板的理解有缺陷,还是发生了其他事情?