最近,我在C ++中使用变量模板进行了一些努力,发现了一些我不理解的东西。假设您有两个全局变量 a
和b
,它们在头文件中声明为 extern 。这两者之间的区别在于,b
是变量模板而a
是不是。现在,我不明白的是,a
确实需要定义但b
需要不。
所以我的< strong>问题是,为什么b
不需要定义,a
或者更确切地说链接器为什么知道定义b
?我可以明确定义 b
吗?如果是,在哪里和如何?
也许我做错了什么,但如果我测试它,代码会编译,链接并正确运行VC ++ 2017编译器。
这是相关的代码:
// header.hpp
#pragma once
extern int a;
template<typename T>
extern T b;
// source.cpp
#include "header.hpp"
int a; // definition of a, but definition of b is missing
// main.cpp
#include "header.hpp"
int main()
{
a = 1;
b<int> = 1;
return 0;
}