如果我有类似的类型声明
typedef void (*command)();
template <command c>
void execute() {
c();
}
void task() { /* some piece of code */ }
然后
execute<task>();
将编译并表现出预期的效果。但是,如果我将模板定义为
template <command c>
void execute() {
command();
}
它仍然可以编译。我是无意中这样做的。现在,我对第二版将要做什么感到困惑。
在C ++中
type_name()
是创建默认初始化实例的实例的表达式type_name
。
对于本机类型,存在隐式定义的默认构造函数,因此例如
int();
是有效的C ++语句(只需创建一个anint
并将其丢弃)。
g++
带有完整警告的警告会发出诊断消息,因为它是可疑的(可能是意外的)操作,但是代码是有效的,甚至可能有依赖于此的程序(如果类型是用户定义的类型,并且实例的构造函数具有边效果)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句