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

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

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

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

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

class SomeObj;

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

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

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

    int index {};
};

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

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

Registrar registrar;

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

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


Из конструктора SomeObj протекла неконстантная отсылка к this.
Выведет:
0, 1
1, 2


До С++17 некоторые компиляторы падают во время исполнения, некоторые выдают мусор. ))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.