如果函数具有相同的名称,如何调用构造函数
如果我有以下情况:
class T
{
public:
T(){}
};
void T()
{
}
int main()
{
T(); // this calls the function, how can I call the constructor T()?
}
我没有任何问题,因为我可以重命名它,但只是好奇我怎样才能强制它调用构造函数,而且我问自己为什么函数调用似乎比构造函数具有更高的优先级。 另外,为什么没有关于重复名称的警告消息。
除了jaunchopanza所说的,你可以限定这个电话:
T::T();
有了这个版本,你可以创建临时对象:
class T
{
public:
T(){}
};
void foo(T) {}
void T()
{
}
int main(){
foo(T::T());
}
基本上,没有名称冲突,基本上,有不同的名称空间
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())
链接地址: http://www.djcxy.com/p/10719.html
上一篇: How to call constructor if function has the same name
下一篇: Linking together >100K pages without getting SEO penalized