Про идентичность const
От: Shmj Ниоткуда  
Дата: 22.01.25 13:32
Оценка: -4
В продолжение темы
Автор: Shmj
Дата: 22.01 10:09
, понял как лучше донести.

Вот пример: https://www.programiz.com/online-compiler/7YubFKkFStr6c

#include <iostream>

int main() {
    const char* str1 = "hello";
    const char* str2 = "hello";

    std::cout << "Address of str1: " << static_cast<const void*>(str1) << std::endl;
    std::cout << "Address of str2: " << static_cast<const void*>(str2) << std::endl;


    return 0;
}


— для вас очевидно что str1 и str2 имеют единый адрес? Разумно?

Идем далее: https://www.programiz.com/online-compiler/9ZzBpAIuHcjzI

#include <iostream>

class MyClass {
public:
    const int value;
    constexpr MyClass(int v) : value(v) {}
};

int main() {
    const MyClass* obj1 = new MyClass(5);
    const MyClass* obj2 = new MyClass(5);

    std::cout << "Address of obj1: " <<static_cast<const void*>(obj1) << std::endl;
    std::cout << "Address of obj2: " << static_cast<const void*>(obj2) << std::endl;

    return 0;
}


Имеем constexpr в конструкторе и const при создании — но выделяются разные участки памяти. Зачем? Сложно проверить и для всех таких constexpr/constexpr не выделять память по 100 раз?

Вроде бы мелочь, а открываются колоссальные возможности по оптимизации — как то если уже обработали такой же (с таким же адресом объект) — то можно повторно не обрабатывать а выдать из кеша. Узнал что в Dart так сделали и какие возможности открыла такая, казалось бы, мелочь — и до сих пор не могу отойти от этой мысли — насколько концепция поменялась.

Или как-то можно это сделать хитроумными способами?
Отредактировано 24.01.2025 9:22 Shmj . Предыдущая версия . Еще …
Отредактировано 24.01.2025 8:57 Shmj . Предыдущая версия .
Отредактировано 24.01.2025 8:29 Shmj . Предыдущая версия .
Отредактировано 24.01.2025 8:23 Shmj . Предыдущая версия .
Отредактировано 22.01.2025 14:08 Shmj . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.