是“T var();”总是在c ++中的函数声明?

时间:2010-12-18 02:55:05

标签: c++ syntax

这可能是某些情况下的实例化(定义)吗?

2 个答案:

答案 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是用户定义的类型,则后一种情况需要可访问的复制构造函数,而前者则不需要。