6 / 6 / 3
Регистрация: 29.07.2015
Сообщений: 61
|
|||||||||||
1 | |||||||||||
Инициализация переменной в шаблонном классе26.09.2015, 10:58. Показов 3248. Ответов 14
Метки нет (Все метки)
Как правильно инициализировать шаблонную переменную в классе?
Т.е. есть ли какая разница между x() и x( T() ) ? 1-й вариант
В обоих случаях Print() печатает 0. Но все таки есть какие различия?Вот что хочу узнать
0
|
26.09.2015, 10:58 | |
Ответы с готовыми решениями:
14
Инициализация статического члена std::vector в шаблонном классе Инициализация переменной в классе Инициализация переменной структуры, определенной в классе Инициализация в производном классе переменной из базового класса |
698 / 105 / 19
Регистрация: 22.06.2014
Сообщений: 234
|
||||||
26.09.2015, 11:13 | 2 | |||||
А если вот так?
0
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
26.09.2015, 11:15 | 3 |
В первом случае по умолчанию, во втором с параметром, но параметр получается снова через конструктор по умолчанию. Второй вариант избыточен.
1
|
6 / 6 / 3
Регистрация: 29.07.2015
Сообщений: 61
|
||||||
26.09.2015, 13:29 [ТС] | 4 | |||||
Martein, это совсем другое. У меня конструктор без аргументов
Тогда почему в std :: pair применяется избыточный вариант? Наверно не просто так
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
26.09.2015, 13:51 | 5 |
Сообщение было отмечено IVSasha как решение
Решение
с практической точки зрения - результат будет одинаковым в обоих случаях.
(компилятор оптимизирует вызов избыточного конструктора копирования/перемещения). с технической точки зрения, второй вариант накладывает дополнительное требование: доступность конструктора копирования или перемещения.
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
26.09.2015, 14:47 | 6 |
Уже не применяется. http://wg21.cmeerw.net/lwg/issue265
1
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
26.09.2015, 14:53 | 7 |
Tulosba, удивляюсь, как ты это раскопал.
0
|
6 / 6 / 3
Регистрация: 29.07.2015
Сообщений: 61
|
|
26.09.2015, 15:31 [ТС] | 9 |
hoggy, если у T не будет конструктора копирования, то нельзя передать в класс MyClass<T> этот объект?
Добавлено через 1 минуту Не по теме: нужно самому проверить спасибо
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
26.09.2015, 15:35 | 10 | |||||
если конструктор копирования будет не доступен.
он может быть, но быть приватным, например. в таком случае так же не скомпилиццо: http://rextester.com/PQGBNL13679
1
|
6 / 6 / 3
Регистрация: 29.07.2015
Сообщений: 61
|
|||||||||||
26.09.2015, 15:51 [ТС] | 11 | ||||||||||
Как написал nmcf что второй вариант избыточен. Он требует конструктора копирования.
А для чего в STL, в том же std :: pair таким способом сделано?
у меня еще применяется )
0
|
Tulosba
|
26.09.2015, 15:54
#12
|
0
|
6 / 6 / 3
Регистрация: 29.07.2015
Сообщений: 61
|
|
26.09.2015, 16:02 [ТС] | 13 |
Tulosba, не могу. компьютер слабоват. вот куплю поновее и обновлюсь.
сейчас Визуал Студио 2015 не установится потому компьютер слабый, не хватает минимальных требований
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
26.09.2015, 16:04 | 14 | ||||||||||
Сообщение было отмечено IVSasha как решение
Решение
вот такое:
который для фундаментальных типов (например для int ) запишит нолик. вот такое:
однако во время дремучие, в некоторых компиляторах это было по разному реализованно. поэтому ввели вот такой костыль. в настоящее время уже не актуально. потому что стандарт явно говорит: явный вызов дефолтного конструктора для подов должен забить память нулями.
1
|
6 / 6 / 3
Регистрация: 29.07.2015
Сообщений: 61
|
|
26.09.2015, 16:09 [ТС] | 15 |
hoggy, большое спасибо за объяснения. тему можно закрыть. теперь все понятно
0
|
26.09.2015, 16:09 | |
26.09.2015, 16:09 | |
Помогаю со студенческими работами здесь
15
Ошибка в шаблонном классе Итератор в шаблонном классе Ошибки в шаблонном классе Параметры в шаблонном классе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |