我有一个只有标头的类,具有两个功能
//F1
void add_argument(const std::string &name, const std::string &desc,
const bool required = false) {
//...
}
和
//F2
void add_argument(const std::string &name, const std::string &long_name,
const std::string &desc, const bool required = false) {
//...
}
在我的代码中,我打电话
//L1: should call F2
add_argument("-w", "--write",
"Writes the calibrated values to the config.",
false);
//L2: should also call F2
add_argument(
"-i", "--interval",
"The time interval in milliseconds that it should check in.");
预期的行为是L1和L2都调用相同的方法F2。但是,当我编译并运行时,L1确实正确调用了F2,但是L2调用了F1。
我想知道的是为什么在L2中似乎将最后一个字符串转换为布尔值而不使用默认参数?这是C ++ 11标准的一部分,还是编译器/链接器错误,还是我犯了一个愚蠢的错误?
正在编译并在RaspberryPi上运行
Linux raspberrypi 4.14.71-v7+ Raspbian GNU/Linux 9 (stretch)
g++ (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516
GNU ld (GNU Binutils for Raspbian) 2.28
使用与此类似的命令(实际上我很难将cmake与make配合使用,这些命令很难准确复制)
g++ -std=c++11 -Wall -I. main.cpp -o test
(我没有编译器警告)