如果函数具有相同的名称,如何调用构造函数

时间:2012-05-07 14:44:30

标签: c++ constructor overload-resolution

如果我有以下内容:

class T
{
   public: 
      T(){}
};

void T()
{
}

int main()
{
  T(); // this calls the function, how can I call the constructor T()?
}

我没有任何问题,因为我可以重命名它,但只是好奇我如何强制它调用构造函数,而且我也问自己为什么函数调用似乎比构造函数。另外,为什么没有关于重复名称的警告消息。

2 个答案:

答案 0 :(得分:3)

除了jaunchopanza所说的,你可以使电话有资格:

T::T();

使用此版本,您可以创建临时版:

class T
{
   public: 
      T(){}
};

void foo(T) {}

void T()
{
}

int main(){
   foo(T::T());
}

答案 1 :(得分:0)

基本上,没有名称冲突,基本上,有不同的名称空间

T() ==> namespace::T() It;s a function call not an object instantiation. 
T a() ==> namespace ::T::T() It;s is instantiation of T class calling the constructor.
T a() ; a() ==>namespace ::T::T()::() It;s call the functor of the T Class (need to define the operator())