170 похожих чатов

Гайз, ку Объясните, какого фига подобное является корректным в работе?))) Это

же UB получается?

struct S {
int x = 1;
int &r = x;

void f(int y) const {
r = y;
}

};

int main() {
S s;
s.f(2);
std::cout << s.x; // -> 2

return 0;
}

27 ответов

53 просмотра

Не уб, потому что S не декларирована как константная

Аа.. Табуляция

Ну это уб

Stepan-Zorin Автор вопроса

при попадании в константный метод поведение эквивалентно константному объекту

Stepan Zorin
при попадании в константный метод поведение эквива...

Нет, что посетили константным, то и является

Stepan-Zorin Автор вопроса
Kelbon
Ссылка меняется? Нет. Значит корректно

так само поле в константном методе является константным на момент обращения

Stepan Zorin
так само поле в константном методе является конста...

На момент обращения язык и компилятор уже ничего не знают о том куда указывает ссылка

Stepan-Zorin Автор вопроса
Kelbon
На момент обращения язык и компилятор уже ничего н...

окей, я изменил на const, но вопрос тот же

Stepan-Zorin Автор вопроса
Kelbon
Ну это уб

получается УБ, да?

Stepan-Zorin Автор вопроса
Kelbon
https://t.me/ProCxx/600058

я исправил на const. Что в таком случае?

Stepan Zorin
получается УБ, да?

Если константа, то уб, проверить элементарно, добавить constexpr

Stepan-Zorin Автор вопроса
Kelbon
Если константа, то уб, проверить элементарно, доба...

Да, с constexpr всё и в правду ломается. Спасибо

GNU/Линуксяша-libre
Аа.. Табуляция

осуждать табы по 4, мда

λᵃᵐ
осуждать табы по 4, мда

У тебя 4, у кого-то 8 или 2

https://eao197.blogspot.com/2023/08/progc-nrvorvo-ub.html?m=1 Есть еще вот такой занятный ногострел из этой же серии.

Ага, mutable не нужен...

Sergey S
https://eao197.blogspot.com/2023/08/progc-nrvorvo-...

Это любопытное и скорее всего заслуживает репорта: кажется, что сейчас нет однозначности относительно того, какой тип у объекта в этом случае в части cv-квалификаторов, поскольку NRVO позволяет элиасинг сквозь них и не указывается, тип какого из конфликтующих определений брать для итогового объекта, если не ошибаюсь.

λᵃᵐ
осуждать табы по 4, мда

Там табов вообще не было, лол

Michael
У тебя 4, у кого-то 8 или 2

да, и теперь это нужно осуждать

Это точно UB? clang-tidy не ругается, PVS-Studio не ругается, Sonar не ругается, если добавить constexpr к f — ничего не падает, всё работает так же хорошо

Eoan Ermine
Это точно UB? clang-tidy не ругается, PVS-Studio н...

Там, кстати, функцию можно убрать и сделать просто s.r = 2;

https://godbolt.org/z/PbcG5c9o4

Denis
https://godbolt.org/z/PbcG5c9o4

А это точно говорит об UB? Мне кажется, это не является constant expression не из-за того, что это UB, а из-за [expr.const#5.16] 5. An expression E is a core constant expression unless the evaluation of E, following the rules of the abstract machine ([intro.execution]), would evaluate one of the following:... 5.16 a modification of an object ([expr.ass], [expr.post.incr], [expr.pre.incr]) unless it is applied to a non-volatile lvalue of literal type that refers to a non-volatile object whose lifetime began within the evaluation of E;

Eoan Ermine
Это точно UB? clang-tidy не ругается, PVS-Studio н...

Изменение константного объекта — это ub. В твоём примере нет ub, потому что нет изменения константного объекта. static member не связан ни с одним из экземпляров и их константностью.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта