一位同事让我查看他正在编写的一些代码,并遇到了特定行的问题,编译器 (g++) 会抱怨函数调用没有基于其参数的匹配函数。
在以两种方式解决问题后(一种是将参数移动到它自己的变量并传递它,接下来是更改参数列表以将其作为 const 引用),我不得不问这个问题:为什么解决方案是这样的它是?正如我的同事所说,我不满意把它写下来,好像一些构造函数的细节被隐藏起来了。
结果,我将问题复制并减少到以下问题(使用 g++ -Wall -ansi -pedantic 编译):
class SomeClass
{
public:
static void SomeFunction(SomeClass& sc) {}
static void SomeFunction2(const SomeClass& sc) {}
};
class SomeChild : public SomeClass {};
void testOne(void)
{
// this compiles
SomeChild sc = SomeChild();
SomeClass::SomeFunction(sc);
// this doesn't compile
//SomeClass::SomeFunction(SomeChild());
}
void testTwo(void)
{
// this compiles
SomeChild sc = SomeChild();
SomeClass::SomeFunction2(sc);
// this compiles
SomeClass::SomeFunction2(SomeChild());
}
int main(void)
{
testOne();
testTwo();
return 0;
}
我可能在这里遗漏了一些非常基本的东西,但是谁能向我解释为什么编译器认为无法编译的行没有匹配的函数调用?
提前致谢。