Форум программистов, компьютерный форум CyberForum.ru

Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? - C++

Восстановить пароль Регистрация
 
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
17.12.2011, 08:15     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #1
То есть честно говоря, вопрос так надо ставить: почему если конструктор встроенный, то можно использовать параметр (по умолчанию) шаблона класса, а если не встроеный, то нельзя? Если бы было единообразие, я бы может списал всё на стандарт, а так какой-то двойной стандарт получается!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 #include <stdio.h>
template <class T= int >
class kl {
 public:
  kl (T) {printf ("hello, word!\n");};
  //kl (T);
};
 
int main () {
 kl<> kl_ (45);
 getchar ();
 return 0;
}
 
//template <class T= int >
//kl <T>:: kl (T) {printf ("hello, word!\n");}
Вот если закомментить конструктор и ракомментить чё в даный момент закомменчено, то получится что конструктор объявлен в классе, а определён за его пределами. И тогда ничё компилиться не будет. Почему? (А щас компилится).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2011, 08:15     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?
Посмотрите здесь:

Еще раз о конструкторе по умолчанию C++
Почему нехорошо себя ведёт конструктор класса (не компилится ничё), если ему параметром ссылку на константу? C++
C++ Параметр в конструкторе копирования
Почему нельзя использовать в операторе case переменные, которые определены как #define C++
C++ почему break нельзя использовать в if
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Card1nal
6 / 6 / 0
Регистрация: 04.01.2010
Сообщений: 118
17.12.2011, 08:22     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #2
Темплейты вообще не желательно выносить за пределы класса. Поэтому для них и используют *.hpp Там частенько надо еще указывать все возможные варианты значения Т.
А вот почему - кроме как "так реализовали" я тебе ответить не могу. Надо просто помнить, что темплейты, по сут, другой язык, пристоенный к компилятору с++, и там свои заморочки.
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
17.12.2011, 09:44     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
template <class T= int >
class kl {
 public:
  kl (T);
};
 
int main () {
 kl<> kl_ (45);
 return 0;
}
 
template <class T >
kl <T>:: kl (T) {printf ("hello, word!\n");}
Дефолтные параметры указываются только один раз. Касается и обычных функций и шаблонов.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
17.12.2011, 10:25     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #4
Цитата Сообщение от Card1nal Посмотреть сообщение
Темплейты вообще не желательно выносить за пределы класса.
Это еще почему?
Card1nal
6 / 6 / 0
Регистрация: 04.01.2010
Сообщений: 118
17.12.2011, 14:44     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #5
Цитата Сообщение от fasked Посмотреть сообщение
Это еще почему?
По причине читаемости. Их поэтому в hpp, как я уже сказал, и пишут. Одно дело когда код без темплейтов - да, там проще иметь прототипы в .h. А в темплейтах хотелось бы видить, что, собственно говоря меняется.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.12.2011, 14:51     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #6
Цитата Сообщение от Card1nal Посмотреть сообщение
По причине читаемости.
нет, по причине "невозможности" импорта шаблонов в файл реализации

Цитата Сообщение от Card1nal Посмотреть сообщение
Их поэтому в hpp, как я уже сказал, и пишут. Одно дело когда код без темплейтов - да, там проще иметь прототипы в .h
Шаблоны можно писать в заголовчном файле. Заголовочный файл может иметь расширение как *.h так и *.hpp
Yandex
Объявления
17.12.2011, 14:51     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?
Ответ Создать тему
Опции темы

Текущее время: 05:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru