1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||
Conversion by constructor , нужны пояснения29.04.2017, 04:11. Показов 2233. Ответов 17
Метки нет Все метки)
(
Здравствуйте.
Смотрю я, что пишут об этом Conversion by constructor, вижу одно:
______________ Просьба расставить все точки над Иъ и немного исправить моё искажённое восприятие такого конструктора. Ещё бы мне не помешал маленький и простой пример, где такое преобразование, которое запрещается explicit, оказывается не к месту.
0
|
29.04.2017, 04:11 | |
Ответы с готовыми решениями:
17
Expected constructor, destructor, or type conversion before '.' token
Ошибка expected constructor, destructor, or type conversion before ';' token |
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
29.04.2017, 04:18 [ТС] | ||
Добавлено через 1 минуту Не по теме: То, что я ошибаюсь - это и мне понятно, я же не писал обратного, а прошу помощи в деинсталляции ошибки из моей головы.
0
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
|
|||
29.04.2017, 04:25 | |||
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
29.04.2017, 04:32 [ТС] | ||
MyClass obj1 = 100; //Так я и хотел, не доглядел, не доправил... Но это суть не меняет. Ошибка из другого леса. Добавлено через 6 минут И не при таком преобразовании, а всё-таки при таком конструкторе, тут как бы порядок имеет значение, полагаю.
0
|
![]() ![]() 8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
29.04.2017, 04:34 | ||||||
http://rextester.com/UULKO63674
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
29.04.2017, 04:41 [ТС] | |
Не то. Меня интересует только конструктор. То, что он умеет построится из int я знаю, о conversion function я тоже знаю, и она явно не конструктор.
Добавлено через 1 минуту Что обозначает определить преобразование типа аргумента в тип класса - не понимаю.
0
|
![]() ![]() 8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
29.04.2017, 04:56 | |||||||
0
|
19426 / 10042 / 2447
Регистрация: 30.01.2014
Сообщений: 17,709
|
|||||||
29.04.2017, 19:12 | |||||||
С через конструктор c bool (любой указатель неявно приводится к bool , как мы все знаем). В общем, это может быть совсем не тем, что мы в итоге ожидаем.
1
|
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
|
|||
29.04.2017, 19:24 | |||
![]() Добавлено через 3 минуты ![]()
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||
29.04.2017, 20:10 [ТС] | |||||||
Если указатель умеет приводиться к bool, то этот пример мало отличается от такого:
0
|
19426 / 10042 / 2447
Регистрация: 30.01.2014
Сообщений: 17,709
|
|||||||||||||||||||||||||||
29.04.2017, 20:43 | |||||||||||||||||||||||||||
Я этот пример привел не от балды. Это было реальной проблемой в реальном проекте. Тут в твоем примере только одно преобразование. А в моем - два. И это в добавок к тому, что мы получаем совсем другое поведение, совершенно отличное от внешне ожидаемого: у нас же нет конструктора для указателя. Зачем вообще нужен explicit? Простой ответ - чтобы запретить неявное преобразование. Но зачем может быть нужно запрещать неявное преобразование? Чтобы подчеркнуть смысловое различие используемых сущностей. Иными словами, если мы пишем:
А если мы пишем
И, естественно, вызывая функцию с параметром String
3
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
29.04.2017, 21:21 [ТС] | |
Я всё равно не понимаю.
Меня интересует сейчас только одна часть текущей темы: неожиданные преобразования. Все о них говорят, но никто не показывает такую неожиданность в действии. Я не вижу другого поведения, что я должен был ожидать? Кроме того, что можно ожидать, что программа компилироваться не должна, мне ничего в голову не приходит. Как засветить проблему? Кроме того, что можно сказать: "я не знаю, почему это работает", мне и сказать нечего. (если я не знаю о конвертирующем конструкторе, конечно).
0
|
19426 / 10042 / 2447
Регистрация: 30.01.2014
Сообщений: 17,709
|
||||||||||||||||||||||||||||||||
29.04.2017, 22:10 | ||||||||||||||||||||||||||||||||
![]() Решение![]() Представим, что у нас есть большой С++ проект, в котором есть такой класс:
Далее, представим, что на каком-то этапе развития проекта решили провести рефакторинг и заменить функцию
то поведение кода изменится, и вполне возможно, что заметить это удастся уже слишком поздно. Понятно, что пример несколько утрированный, но по сути своей обычно все именно так и происходит: что-то меняется, код продолжает компилироваться, ошибка маскируется. explicit - это средство, позволяющее переложить часть контроля за кодом на плечи компилятора, облегчив тем самым работу программиста. За этим же в С++11 добавили возможность указывать explicit в user-defined conversion operator. В его отсутствие в некоторых случаях вынуждены были выдумывать вот такие обходные костыли: safe bool idiom.
2
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
30.04.2017, 23:04 [ТС] | |
DrOffset, Ваш последний ответ замечателен.
Спасибо.
0
|
30.04.2017, 23:04 | |
Помогаю со студенческими работами здесь
18
Ошибка "expected constructor, destructor, or type conversion" Нужны пояснения Нужны некоторые пояснения Нужны пояснения по вложенным классам Синглтон Мейерса, нужны некоторые пояснения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Batch Transform и Batch Gizmo Drawing API в Unity
GameUnited 20.04.2025
В мире разработки игр и приложений на Unity производительность всегда была критическим фактором успеха. Создатели игр постоянно балансируют между визуальной привлекательностью и плавностью работы. . .
|
Звук в Unity: Рандомизация с Audio Random Container
GameUnited 20.04.2025
В современных играх звуковое оформление часто становится элементом, который либо полностью погружает игрока в виртуальный мир, либо разрушает атмосферу за считанные минуты. Представьте: вы исследуете. . .
|
Максимальная производительность C#: Советы, тестирование и заключение
stackOverflow 20.04.2025
Погружение в мир микрооптимизаций C# открывает перед разработчиком целый арсенал мощных техник. Но как определить, где и когда их применять? Ответ начинается с точных измерений и профилирования.
. . .
|
Максимальная производительность C#: Предсказание ветвлений
stackOverflow 20.04.2025
Третий ключевой аспект низкоуровневой оптимизации — предсказание ветвлений. Эта тема менее известна среди разработчиков, но её влияние на производительность может быть колоссальным. Чтобы понять. . .
|
Максимальная производительность C#: Векторизация (SIMD)
stackOverflow 20.04.2025
Помимо работы с кэшем, другим ключевым аспектом низкоуровневой оптимизации является векторизация вычислений. SIMD (Single Instruction, Multiple Data) позволяет обрабатывать несколько элементов данных. . .
|
Максимальная производительность C#: Процессорный кэш
stackOverflow 20.04.2025
Знакомство с внутренним устройством процессорного кэша — ключевой шаг в написании по-настоящему быстрого кода на C#. Этот слой архитектуры компьютера часто ускользает от внимания разработчиков, но. . .
|
Максимальная производительность C#: Введение в микрооптимизации
stackOverflow 20.04.2025
В мире разработки на C# многие привыкли полагаться на . NET Runtime, который "магическим образом" сам оптимизирует код. И часто это работает - современные JIT-компиляторы творят чудеса. Но когда речь. . .
|
MVC фреймворк в PHP
Jason-Webb 19.04.2025
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
|
Dictionary Comprehensions в Python
py-thonny 19.04.2025
Python славится своей выразительностью и лаконичностью, что позволяет писать чистый и понятный код. Среди множества синтаксических конструкций языка особое место занимают словарные включения. . .
|
Шаблоны и протоколы для создания устойчивых микросервисов
ArchitectMsa 19.04.2025
Микросервисы — архитектурный подход, разбивающий сложные приложения на небольшие, независимые компоненты. Вместо монолитного гиганта, система превращается в созвездие небольших взаимодействующих. . .
|