默认参数错误:将字符串视为布尔值

时间:2018-12-10 19:30:38

标签: c++ gcc raspberry-pi g++ default-arguments

我有一个只有标头的类,具有两个功能

  //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

(我没有编译器警告)

0 个答案:

没有答案