我收到以下编译器消息
main.cpp: In instantiation of ‘void fkt(Foo) [with Foo = int]’:
main.cpp:5:7: required from here
无论如何,二进制文件都会创建,所以这不是错误。但这也是
未标记为警告。此消息是什么?为什么我会收到它?
我将代码简化为以下示例
template <typename Foo>
void fkt(Foo f) {}
int main() {
fkt(1);
return 0;
}
¹ gcc 4.7.2
EDIT:这里是重现的步骤:
% cat main.cpp
template <typename Foo>
void fkt(Foo f) {}
int main() {
fkt(1);
return 0;
}
% g++ -Wall -Wextra main.cpp
main.cpp: In instantiation of ‘void fkt(Foo) [with Foo = int]’:
main.cpp:5:7: required from here
main.cpp:2:6: warning: unused parameter ‘f’ [-Wunused-parameter]
main.cpp: In instantiation of ‘void fkt(Foo) [with Foo = int]’:
main.cpp:5:7: required from here
main.cpp:2:6: warning: unused parameter ‘f’ [-Wunused-parameter]
这只是一个警告。您收到有关未使用参数的 3 行警告。前两行是编译器试图帮助您识别警告原因的代码。这是英文翻译:
在实例化中fkt
带模板参数Foo
as int
这是第 5 行第 7 列所要求的,您有一个未使用的参数,称为f
.
fkt
是一个函数模板。必须使用给定的模板参数实例化模板。例如,如果您使用fkt<int>
, the fkt
函数模板实例化为Foo
as int
。如果你使用fkt<float>
, the fkt
函数模板实例化为Foo
as float
.
特别是,该消息的第一行告诉您警告发生在内部fkt
这是实例化的Foo
as int
。警告的第二行告诉您实例化发生在第 5 行。这对应于这一行:
fkt(1);
这是实例化fkt
with Foo
as int
因为模板参数Foo
是根据您给出的论点类型推断出来的。既然你路过1
, Foo
推论为int
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)