Просматривая какой-то код C++03, я обнаружил пример самого неприятного синтаксического анализа, который меня смутил:
#include <sstream>
#include <string>
int main(int, char** argv)
{
std::stringstream ss(std::string(argv[0]));
}
В приведенном выше фрагменте ss
— это объявление функции, которая принимает std::string*
и возвращает std::stringstream
.
Как std::string(argv[0])
интерпретируется как std::string*
?
Интуитивно я подумал, что argv[0]
однозначно является доступом к argv
.
argv[0]
, по-видимому, представляет собой массив размера 0 типаargv
. Я могу получить тот же результат, что и вы, если используюargv[1]
. Интересный вопрос. - person François Andrieux   schedule 12.12.2017std::stringstream ss(std::string argv[]);
, что само по себе эквивалентноstd::stringstream ss(std::string * argv);
. - person François Andrieux   schedule 12.12.2017