Другой конструктор вызывается при использовании скобок и паренов - PullRequest
0 голосов
/ 01 марта 2020

Я писал функцию для обработки аргументов командной строки.

#include <vector>
#include <string>
#include <iterator>
#include <iostream>

void process(std::vector<std::string> args)
{
    std::copy(args.begin(), args.end(), std::ostream_iterator<std::string>{std::cout, "\n"});   //show the arguments
}
int main(int argc, char* argv[])
{
    //process((&argv[0], &argv[argc]));   //ERROR
    process({&argv[0], &argv[argc]});
}

У меня вопрос , почему не работает версия в скобках.
Я хочу построить вектор с версия итератора. Я понимаю, что std::initializer_list будет иметь высокий приоритет для выбора, но, похоже, это не так, потому что здесь можно успешно обработать несколько аргументов.

1 Ответ

2 голосов
/ 01 марта 2020

С

process((&argv[0], &argv[argc]));

вы используете оператор запятой , чтобы действительно сделать

process(&argv[argc]);

Это, конечно, неправильно, так как у вас нет process Перегрузка функции, которая принимает указатель на указатель на char (т. Е. char**).

Заключенный в фигурные скобки список распознается компилятором как возможный вариант std::vector конструктор (номер 5 в списке в связанной ссылке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...