C++. Почему можно так ( int = 10 )? (Объясните пожалуйста смысл сего.)

Модератор: Модераторы разделов

vipermagi
Сообщения: 83
ОС: AgiliaLinux

C++. Почему можно так ( int = 10 )?

Сообщение vipermagi »

В одной книжке есть пример шаблонного класса и в заголовочнике присутствует вот такой кусок

Код: Выделить всё

 6  template< typename T >
 7  class Stack
 8  {
 9  public:
10     Stack( int = 10 ); // default constructor (Stack size 10)


ниже, после класса

Код: Выделить всё

39  // constructor template
40  template< typename T >
41  Stack< T >::Stack( int s )
42     : size( s > 0 ? s : 10 ), // validate size
43       top( -1 ), // Stack initially empty
44       stackPtr( new T[ size ] ) // allocate memory for elements
45  {
46     // empty body
47  } // end Stack constructor template


Зачем в десятой строке засовывают в конструктор инт равен 10? Как это вообще, чево это такое? Там не объясняется рядом ни где.
А так всё компилится без ошибок и работает.

PS: Не привожу целиком, т.к. цопирайт стоит.
Спасибо сказали:
Obscurus
Сообщения: 172

Re: C++. Почему можно так ( int = 10 )?

Сообщение Obscurus »

Видимо задаётся значение аргумента по умолчанию.
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: C++. Почему можно так ( int = 10 )?

Сообщение vipermagi »

Obscurus писал(а):
23.06.2013 10:16
Видимо задаётся значение аргумента по умолчанию.


В строке 10 он не по умолчанию задаётся, а вообще. По умолчанию - это уже в конце тернарного оператора в строке 42. Смысл вопроса не в этом. Смысл вопроса в том, почему вместо ( int s = 10 ) поставили ( int = 10 ) и оно при этом работает. Ведь если поменять на ( int s = 10 ), то оно так же скомпилится без ошибок и тоже так же будет работать.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5364
ОС: Gentoo

Re: C++. Почему можно так ( int = 10 )?

Сообщение /dev/random »

vipermagi писал(а):
23.06.2013 10:49
В строке 10 он не по умолчанию задаётся, а вообще. По умолчанию - это уже в конце тернарного оператора в строке 42.

Нет, значение аргумента по умолчанию - это как раз в строке 10.

vipermagi писал(а):
23.06.2013 10:49
Смысл вопроса не в этом. Смысл вопроса в том, почему вместо ( int s = 10 ) поставили ( int = 10 ) и оно при этом работает. Ведь если поменять на ( int s = 10 ), то оно так же скомпилится без ошибок и тоже так же будет работать.

В прототипе (но не в определении) имена аргументов можно опускать.
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: C++. Почему можно так ( int = 10 )?

Сообщение vipermagi »

/dev/random писал(а):
23.06.2013 11:57
Нет, значение аргумента по умолчанию - это как раз в строке 10.

То есть, если я попытаюсь в вызов этого конструктора засунуть целое число, то мне выдаст ошибку? Ну при условии, что конструктор в классе единственный.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5364
ОС: Gentoo

Re: C++. Почему можно так ( int = 10 )?

Сообщение /dev/random »

vipermagi писал(а):
23.06.2013 12:35
То есть, если я попытаюсь в вызов этого конструктора засунуть целое число, то мне выдаст ошибку? Ну при условии, что конструктор в классе единственный.

Нет. Но и если вы не будете его передавать, он тоже не выдаст ошибки.
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: C++. Почему можно так ( int = 10 )?

Сообщение vipermagi »

А, значит два в одном. В принципе разумно.
Спасибо сказали: