|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.04.2013, 14:42 | #11 | ||
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Код:
Раздел 12.2, пункт 5: Цитата:
Цитата:
|
||
15.04.2013, 14:58 | #12 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Вспылил, был неправ:
Arg arg = 10; по стандарту еквивалентно Arg arg; arg = Arg(10); Тогда как в MSVC будет напрямую: Arg arg(10); Вот вам код, который прокатит в MSVC 2010- и завалит GCC (в 2012 вроде пофикшено): Код:
Последний раз редактировалось waleri; 15.04.2013 в 15:03. |
15.04.2013, 15:04 | #13 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Там есть возможность выбирать разные версии компиляторов. Можете по-эскперементировать - этот код работает. Более того, код библиотечный, и в работе уже несколько месяцев. Разные члены команды собирают проект разными компиляторами. В том числе виндузятным. И за все время баг ни разу так и не выявился. И вот только позавчера провалился релизный тест, что и привлекло моё внимание (есть пакет гугл-тестов, которые собираются на разных настройках компиляторов, и покрывают весь функционал механизма). В действительности, Arg - это аргумент функции. Изначально,я создал его для того, что бы имитировать шаблонные виртуальные функции: Код:
Код:
2. То, что я показал по ссылке - это всего лишь пример. Реальный механизм содержит достаточно бизнес-логики, что бы обеспечить типо-безопасность. Учитывает константность объектов. Умеет работать с любыми типами данных, включая массивы. 3. В действительности, ещё раз глянул тесты: релиз студии провалился на тесте, где Arg был использован вне пределов функции. И поломался на временном объекте. Резюмируя: использование Arg безопасно только если его использовать по назначению: внутри функций. И чревато если использовать снаружи функций... Сейчас я подумываю о том, что возможно стоит запретить времени компиляции подсовывать временные объекты. Это сузит область применения Arg, и снизит удобство его использования, но увеличит безопасность.... Вот только знать бы как это вообще можно такой статический ассерт то вляпать... Последний раз редактировалось _Bers; 15.04.2013 в 15:21. |
|
15.04.2013, 15:10 | #14 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Сделайте конструктор explicit - возможно поможет
|
15.04.2013, 15:13 | #15 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Вообще, понятия не имею, за каким макаром, гцц докалебался до приватного копирующего конструктора |
|
16.04.2013, 17:33 | #16 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
|
16.04.2013, 18:20 | #17 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
|
|
16.04.2013, 19:55 | #18 | |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Почему это?
C++11 12.8.31 Цитата:
|
|
16.04.2013, 20:55 | #19 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Н-да. Нехорошо (с моей стороны). Может, подскажете, где лежат заведомо корректные стандарты 2003 и 2011?
|
16.04.2013, 21:43 | #20 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Заведомо корректные стандарты за деньги продаются :-(
А так http://cs.nyu.edu/courses/spring13/C...ard%202003.pdf http://www.open-std.org/jtc1/sc22/wg...2012/n3376.pdf |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
релиз собирается дебаг нет. | veshiyoleg | Visual C++ | 2 | 07.10.2011 20:12 |
Релиз программы! Нужен совет. | DimOn4Ik | Свободное общение | 4 | 25.06.2010 13:19 |
Посоветуйте релиз TreeView | KWN, lnc | Общие вопросы Delphi | 4 | 12.05.2009 02:55 |
Релиз ViceCity | Манжосов Денис :) | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 13 | 05.02.2008 14:18 |