История поддержки первого параметра по умолчанию в функции C ++ - PullRequest
1 голос
/ 15 июня 2011

Поскольку этот вопрос повторяется, параметр по умолчанию может быть предоставлен для первого аргумента в функции C ++.Итак, следующее

void foo(int a, int b=5); // good 
void foo(int a=5, int b=5); // used to be an error
void foo(int a=5); // used to be an error

Тем не менее, я помню, как на ранних этапах обучения программированию это было запрещено.В какой момент это начало меняться?Какой стандарт C ++ снял это ограничение?Поскольку я занимался большей частью своего раннего программирования в Visual Studio, возможно, это даже не было проблемой стандартов, а определенным ограничением компилятора. Если да, помните ли вы, какие (приблизительно) версии компилятора имели это ограничение?

Ответы [ 4 ]

5 голосов
/ 15 июня 2011

Вы говорите:

 void foo(int a=5); // used to be an error

Такого никогда не было.Вы помните неправильно.

3 голосов
/ 15 июня 2011

Единственный официальный стандарт c ++ 1998 года имеет их, так что технически говоря, стандарт всегда имел их.До этого, даже часто рассматриваемый первый квазистандарт для C ++, книга Бьярна Страуструпа Язык программирования C ++ упоминает о них.Это было одно из первых вещей Strousrup, добавленных в ANSI C при разработке C ++.Но поскольку стандарт не был официальным, вполне возможно, что были компиляторы, которые его не поддерживали.

3 голосов
/ 15 июня 2011

Я думаю, вы неправильно поняли вопрос, на который вы ссылались, и его ответы. Требуется только то, что если n-й параметр имеет значение по умолчанию, то все последующие также должны иметь значения по умолчанию. Так было всегда. Никогда не было какого-либо определенного правила, согласно которому параметр first не может иметь значение по умолчанию. Обратите внимание, что не важно, что все параметры по умолчанию помещены в одну и ту же декларацию. Следующее тоже нормально.

void f(int x = 9, int y);
//using f here is an error
void f(int x, int y = 10);
//using f here is OK now
0 голосов
/ 15 июня 2011

На сегодняшний день (июнь 2011 года) существует только один стандарт C ++.Так что это должно быть в C ++ стандарте 1998 года.

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