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 ответов

27 просмотров

Не уб, потому что 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 не связан ни с одним из экземпляров и их константностью.

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

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

читать файл максимально быстро? странный вопрос))
zamtmn
53
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
16
или вы считаете муит дает знание?
супер_лох_3000 альфа версия
12
А кто такой мужчина в твоем понимании Азиз?
who?です 🐈
11
Ну значит тебе повезло, мы же про транк говорим оба?
Александр (Rouse_) Багель
11
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Карта сайта