Size: a a a

2020 June 27

IZ

Ilia Zviagin in pro.cxx
Татьяна Орлова
может задам глупый вопрос но не нашел ответа  вот есть язык с++ он знает что существует арифметический символ "+"  но вот вопрос как он понимает это. явно в языке зашита функция которая объясняет что такое плюс  но как объяснить логикой это компу
Там нейронка, и думатель...
источник

P

Pepe 🐸 in pro.cxx
Татьяна Орлова
может задам глупый вопрос но не нашел ответа  вот есть язык с++ он знает что существует арифметический символ "+"  но вот вопрос как он понимает это. явно в языке зашита функция которая объясняет что такое плюс  но как объяснить логикой это компу
никак. ты просто говоришь что это operator+ как название функции, а потом предоставляешь параметры и что он делает
источник

P

Pepe 🐸 in pro.cxx
Pepe 🐸
никак. ты просто говоришь что это operator+ как название функции, а потом предоставляешь параметры и что он делает
помимо дефолтного + который есть для встроенных типов
источник

D

DarkPerl in pro.cxx
Не оставляет надежд заработать на cpp программистах ))))
😂
источник

S

Stas in pro.cxx
/report
источник

P

Pepe 🐸 in pro.cxx
Jerzy Syrowiecki
можно написать тесты, в которых этот класс инстанцируется с типичными параметрами
То есть, пояснить хотел, инстанцировать недостаточно, нужно чтобы функция вызывала. У меня были тесты для него, потом я добавил пару тестов с stl которые видимо использовали соответствующие операторы и вылезли ошибки компиляции, а до этого все норм было
источник

JS

Jerzy Syrowiecki in pro.cxx
Pepe 🐸
То есть, пояснить хотел, инстанцировать недостаточно, нужно чтобы функция вызывала. У меня были тесты для него, потом я добавил пару тестов с stl которые видимо использовали соответствующие операторы и вылезли ошибки компиляции, а до этого все норм было
для этого покрытие тестов увеличивают
источник

IZ

Ilia Zviagin in pro.cxx
/ban
источник

IZ

Ilia Zviagin in pro.cxx
/mute
источник

AF

Aidar Fattakhov in pro.cxx
Vlad Serebrennikov
Что, кажется, удалось выяснить к настоящему моменту:
Пример 1
Согласно expr.unary.op.1, разыменование возвращает an lvalue referring to the object or function to which the expression points. Есть трактовка, что раз объекта нет, то UB, но, например, dangling ссылки сами по себе не UB несмотря на то, что исходного объекта нет. Еще есть довольно старая CWG issue 232, где CWG пришла к неформальному консенсусу, что p = 0; *p; is not inherently an error. Полагаю, что в этом примере UB нет.

Пример 2
Видно две потенциальные возможности UB. Разыменование освещено в предыдущем примере, поэтому здесь сфокусируюсь на операторе запятая. Согласно expr.comma.1, операнды вычисляются слева направо, и то, что вернуло разыменование, становится discarded-value выражением. Неформальный консенсус в CWG issue 232 также в том, что an lvalue-to-rvalue conversion would give it undefined behavior, но и его не происходит, потому что о volatile речь у нас нигде не идет (expr.context-2), не говоря о том, что в текущем тексте стандарта этот консенсус, кажется, тоже не отражен: в conv.lval из релевантного только the value contained in the referenced object is not accessed, что наоборот предупреждает возможность UB (basic.lval.11). Полагаю, что UB нет и здесь.

Пример 3
Полагаю, здесь UB начнется самое позднее на попытке доступа к несуществующему объекту под p внутри конструктора копирования согласно basic.lval.11.

Пример 4
Полагаю, здесь UB начнется в момент вызова функции-члена у несуществующего объекта согласно class.mfct.non-static.1.

Пример 5
Если предположить, что разыменование, которое происходит согласно 59 сноске, само по себе допустимо, то далее я не нахожу требований, чтобы сам объект существовал, и, соответственно, причин для UB.
источник

VS

Vlad Serebrennikov in pro.cxx
а что делать со ссылками на элементы вектора после инвалидирующей операции? это тоже UB объявлять?
источник

AF

Aidar Fattakhov in pro.cxx
Vlad Serebrennikov
а что делать со ссылками на элементы вектора после инвалидирующей операции? это тоже UB объявлять?
Они не инициализируются разыменованием нуллптра
источник

VS

Vlad Serebrennikov in pro.cxx
Aidar Fattakhov
Они не инициализируются разыменованием нуллптра
разыменование тоже не ссылку возвращает
источник

AF

Aidar Fattakhov in pro.cxx
Vlad Serebrennikov
разыменование тоже не ссылку возвращает
Разыменование само по себе уб
источник

VS

Vlad Serebrennikov in pro.cxx
Aidar Fattakhov
Разыменование само по себе уб
пруфы, пожалуйста
источник

AF

Aidar Fattakhov in pro.cxx
Vlad Serebrennikov
пруфы, пожалуйста
источник

AF

Aidar Fattakhov in pro.cxx
И ткни еще в определение invalid PTR пж
источник

AF

Aidar Fattakhov in pro.cxx
В итоге все твои остальные выводы исходят из ложной посылки
источник

VS

Vlad Serebrennikov in pro.cxx
Aidar Fattakhov
И ткни еще в определение invalid PTR пж
согласно пункту http://eel.is/c++draft/basic.compound#3.3, invalid pointer value и null pointer value это разные значения
источник

AF

Aidar Fattakhov in pro.cxx
Но null PTR это invalid
источник