Re: Про идентичность const
От: Stanislav V. Zudin Россия  
Дата: 22.01.25 13:37
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Вот пример: https://www.programiz.com/online-compiler/71UkVydEXRPWu


S>
S>#include <iostream>

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

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


S>    return 0;
S>}
S>


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


Не очевидно, но для желающих есть опция компилятора, т.н. "string pooling" ( /GF ).

S>
S>#include <iostream>

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

S>int main() {
S>    constexpr MyClass obj1(5);
S>    constexpr MyClass obj2(5);

S>    std::cout << "Address of obj1: " << &obj1 << std::endl;
S>    std::cout << "Address of obj2: " << &obj2 << std::endl;

S>    return 0;
S>}
S>


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


Если пользователь создал два константных объекта, значит ему это нужно.

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


S>Или как-то можно это сделать хитроумными способами?


А для этого существует "синглетон"!
_____________________
С уважением,
Stanislav V. Zudin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.