C 14警告:太多的变量模板标头(应该为0)
C++14 warning: too many template headers for variable (should be 0)
在尝试最近的G -5编译器时,我在文件中写下了以下语句:
template<T> T a;
template<> int a = 1;
导致:
警告:
a
的模板标题太多(应该为0)
也有效地,它并不是真正专注于a<int>
。例如
template<typename T> T a;
template<> int a = 1;
int main () {
std::cout << a<double> << "n"; // prints 0; OK
std::cout << a<int> << "n"; // prints 0! why not 1?
}
此语法有什么谜?
模板参数只能在函数模板的显式专业中省略。您有一个可变模板,因此必须包括<int>
:
template<> int a<int> = 1;
引用C 14(N4140),14.7.3/10(强调矿山):
tailting template-argument 可以在 template-id 中未指定的命名显式功能模板 专业可以从函数参数类型中推导。
如果您不想重复类型,则可以使用auto
:
template<> auto a<int> = 1;
[实时示例]使用clang。
需要牢记一件事:当使用auto
时,将从启动器而不是从模板参数中推导出专用变量的类型。而且,由于专业化的类型可能与主模板不同,因此即使它们不同,编译器也会很乐意接受。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 错误:字符数组的初始值设定项太多
- 对象实例化调用构造函数的次数太多
- Levenshtein 两个文件的距离花费了太多时间
- 我有三个 getline,但是一旦编译,输入就太多了
- 将使用太多的纹理插值器 - 带旋转的着色器
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 使用Visual Studio在虚幻引擎中创建一个新的类c ++给了我太多的错误
- C++:数组<>初始值设定项太多
- GLib-ERROR:为GWakeup创建管道:打开的文件太多
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- ZeroMq:打开的文件太多.在同一对象上连续增长的fd使用数
- 读取串行命令花费太多时间
- 为什么 Boost unordered_map 在第一次插入时需要太多时间?
- BRK(0) 花费的时间是否太多?
- C++程序给出了太多参数警告
- C 14警告:太多的变量模板标头(应该为0)
- 警告:格式 [-Wformat-extra-args] 的参数太多
- 警告:格式 - fprintf 的参数太多