Re[103]: Когда это наконец станет defined behavior?
От: vopl Россия  
Дата: 22.08.23 09:10
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, vopl, Вы писали:


V>>>Или собственное непонимание, ведь стандарт описан не для домохозяек, а для специалистов с неким ненулевым бэкграундом.

V>>у вас тут секта грубиянов чтоли?

V>Дык, вы ж не показали понимание прочитанного в стандарте.

Ну так это же не повод навешивать ярлыки. Если есть возможность — укажи на ошибку конкретно, я только благодарен буду

V>Давай я покажу тебе суть того UB, на который вы ссылаетесь, где этот UB можно получить безо-всяких реинтерпретаций/хаков:

V>
V>#include <vector>
V>#include <iostream>

V>class SomeObj;

V>class Registrar {
V>    std::vector<SomeObj*> regs_;
V>    int index {};

V>public:
V>    void registerObj(SomeObj * obj);
V>    void incrementAll();
V>};

V>class SomeObj {
V>public:
V>    SomeObj(Registrar & reg) {
V>        reg.registerObj(this);
V>    }

V>    int index {};
V>};

V>void Registrar::registerObj(SomeObj * obj) {
    obj->>index = index++;
V>    regs_.push_back(obj);
V>}

V>void Registrar::incrementAll() {
V>    for(auto * obj : regs_)
        obj->>index++;
V>}

V>Registrar registrar;

V>int main() {
V>    const SomeObj obj1 = SomeObj(registrar);
V>    const SomeObj obj2 = SomeObj(registrar);
V>    std::cout << obj1.index << ", " << obj2.index << std::endl;

V>    registrar.incrementAll();
V>    std::cout << obj1.index << ", " << obj2.index << std::endl;
V>}
V>


V>Из конструктора SomeObj протекла неконстантная отсылка к this.

V>Выведет:
V>
V>0, 1
V>1, 2
V>


V>До С++17 некоторые компиляторы падают во время исполнения, некоторые выдают мусор. ))


Эта суть понятна в полной мере. По прежнему имею мнение что сабжевый "гипотетический UB" имеет такую же природу, но несколько другой механизм активации
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.