void foo(int)
{
}
class X
{
void foo()
{
}
void bar()
{
foo(42);
// error: no matching function for call to 'X::foo(int)'
// note: candidate is:
// note: void X::foo()
// note: candidate expects 0 arguments, 1 provided
}
};
为什么C++无法调用自由函数(这是唯一具有正确签名的函数)?成员函数隐藏自由函数
在这种情况下,您可以使用':: foo(42)'来访问外部foo。 [Ideone演示](http://ideone.com/6HljO)。但是我对命名空间并不了解太多。 – 2012-01-28 12:23:09
我认为这是C++的一个致命弱点。 它使优雅地使用普通的重载自由函数名称变得不可能,例如isempty(thing),其中有许多重载的isempty给定类型的东西,同时允许thing.isempty()也存在。愚蠢,不幸,笨重。 – Mordachai 2014-02-07 20:01:29