当我用 gcc-4.6.3 或 gcc-4.7.2 编译这个程序时,编译器给我一个关于重载调用不明确的错误:
#include <iostream>
#include <functional>
class Scott
{
public:
void func(const bool b = true)
{
std::cout << "Called func() with a boolean arg" << std::endl;
}
void func(std::function<void(void)> f)
#ifdef WITH_CONST
const
#endif
{
std::cout << "Called func() with a std::function arg" << std::endl;
}
};
int main (int argc, char *argv[])
{
Scott s;
s.func([] (void) { });
}
但是,如果我将重载函数设为 const,它可以很好地编译并调用我没想到的方法!
devaus120>> g++ -Wall -std=c++11 -DWITH_CONST wtf.cxx
devaus120>> ./a.out
Called func() with a boolean arg
所以,我有两个问题:
- 当重载方法设为 const 时,它是编译器错误吗?
- 如何确保调用正确的重载函数?(需要以某种方式提出论点吗?)
TIA。
斯科特。:)