У меня есть класс только для заголовка с двумя функциями
//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 последняя строка преобразуется в логическое значение, а не используется аргумент по умолчанию? Является ли это частью стандарта С++ 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
(я не получаю предупреждений компилятора)
const char[]
вstd::string
). См. здесь для подробного объяснения - person alter igel   schedule 10.12.2018std::string
, например, передавstd::string("The time interval in milliseconds that it should check in.")
. Но я не уверен, что есть более простое решение, которое предотвращает возникновение этой ловушки в первую очередь. - person alter igel   schedule 10.12.2018"string"s
. См.: en.cppreference.com/w/cpp/string/ основная_строка/оператор%22%22s - person Evg   schedule 10.12.2018