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

cod*_*nix 7 c++ constructor overload-resolution

如果我有以下内容:

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

void T()
{
}

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

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

Luc*_*ore 3

除了 jaunchopanza 所说的之外,您还可以限定该调用:

T::T();
Run Code Online (Sandbox Code Playgroud)

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

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

void foo(T) {}

void T()
{
}

int main(){
   foo(T::T());
}
Run Code Online (Sandbox Code Playgroud)

  • 根据 C++2003, 3.4.3.1/1a,这不是一个格式良好的程序。*这样的构造函数名称只能在出现在类定义之外的构造函数定义的“declarator-id”中使用。*请注意,标准的示例(应该会失败)在 g++ 上编译成功。 (2认同)