这可能是某些情况下的实例化(定义)吗?
答案 0 :(得分:3)
它始终是C ++(和C语言)中的函数声明,除非它作为参数声明出现,在这种情况下它声明了一个函数指针。
虽然反过来说不能说明:
不,不是,因为是“T var;”总是C ++中的对象声明?
T
可以是函数类型,在这种情况下var
将被声明为函数,除非它作为参数声明出现,如上所述。
答案 1 :(得分:0)
“T var();”
总是c ++中的函数声明吗?
取决于具体情况。
背景1:
template<typename T>
void func()
{
T var(); // function declaration
}
背景2:
template<typename T>
void func(T var() ) // equivalent to `template<typename T> void func (T()) { } `
{
}
在这种情况下,func
返回void并将指向函数的指针作为参数返回T
。省略var
是可选的。
T var(1)
;是什么,是实例化还是与T var = T(1)
相同;
T var(1)
是直接初始化,而T var = T(1)
是复制初始化。在这两种情况下,对象var
都被初始化为T(1
)。
如果T
是用户定义的类型,则后一种情况需要可访问的复制构造函数,而前者则不需要。