Информация об изменениях

Сообщение Re[68]: Когда это наконец станет defined behavior? от 16.05.2023 4:46

Изменено 16.05.2023 7:25 so5team

Re[68]: Когда это наконец станет defined behavior?
Здравствуйте, ·, Вы писали:

s>> Мне надоело мусолить вашу тупость, поэтому вымараю то, что без мата комментировать уже невозможно.

·>Попробуй включить мозг и всё получится.

В вашем случае мозг придется включать психиатрам во время вашего лечения. Ибо откровенные проблемы с логическим мышлением прямо на поверхности:

·>Согласись, что до тебя наконец-то дошло, что с помощью const нельзя обеспечить иммутабельность и можно разойтись.


Есть заявление "нельзя". Есть простейший пример, который демонстрирует обратное:
#include <string>
#include <vector>
#include <thread>
#include <iostream>

using namespace std::string_literals;

using vector_of_string = std::vector<std::string>;

[[nodiscard]]
std::thread
launch_thread(const vector_of_string & v, int iterations) {
    // Здесь компилятор запрещает модифицировать v.
    return std::thread{ [&v, iterations] {
        // Здесь компилятор запрещает модифицировать v.
        std::size_t l{};
        for(int i=0; i < iterations; ++i) {
            for(const auto & s :v) l += s.size();
        }
        std::cout << "iterations: " << iterations << ", l=" << l << std::endl;
    }};
}

int main() {
    const vector_of_string immutable_data{ "Hello"s, "World"s };
    // Здесь компилятор запрещает модифицировать v.
    std::vector<std::thread> threads;
    threads.push_back(launch_thread(immutable_data, 1'000));
    threads.push_back(launch_thread(immutable_data, 2'000));
    threads.push_back(launch_thread(immutable_data, 3'000));
    for(auto & t : threads) t.join();
}


Итого: тезис "нельзя" опровергнут примером (даже несколькими примерами по ходу обсуждения).

Дальнейшее упрямство поциента должно являться предметом интереса у специалистов-мозгоправов.

PS.

·>Это вы заврались. В приведённом тобой коде он не был изменяемым. Точнее, он там вынужденно изменяемый из-за наличия operator=.


Нет. Просто ваш "эквивалент" вовсе и не эквивалент: это и не value type, и не допускает модификацию значения in place.
Re[68]: Когда это наконец станет defined behavior?
Здравствуйте, ·, Вы писали:

s>> Мне надоело мусолить вашу тупость, поэтому вымараю то, что без мата комментировать уже невозможно.

·>Попробуй включить мозг и всё получится.

В вашем случае мозг придется включать психиатрам во время вашего лечения. Ибо откровенные проблемы с логическим мышлением прямо на поверхности:

·>Согласись, что до тебя наконец-то дошло, что с помощью const нельзя обеспечить иммутабельность и можно разойтись.


Есть заявление "нельзя". Есть простейший пример, который демонстрирует обратное:
#include <string>
#include <vector>
#include <thread>
#include <iostream>

using namespace std::string_literals;

using vector_of_string = std::vector<std::string>;

[[nodiscard]]
std::thread
launch_thread(const vector_of_string & v, int iterations) {
    // Здесь компилятор запрещает модифицировать v.
    return std::thread{ [&v, iterations] {
        // Здесь компилятор запрещает модифицировать v.
        std::size_t l{};
        for(int i=0; i < iterations; ++i) {
            for(const auto & s :v) l += s.size();
        }
        std::cout << "iterations: " << iterations << ", l=" << l << std::endl;
    }};
}

int main() {
    const vector_of_string immutable_data{ "Hello"s, "World"s };
    // Здесь компилятор запрещает модифицировать immutable_data.
    std::vector<std::thread> threads;
    threads.push_back(launch_thread(immutable_data, 1'000));
    threads.push_back(launch_thread(immutable_data, 2'000));
    threads.push_back(launch_thread(immutable_data, 3'000));
    for(auto & t : threads) t.join();
}


Итого: тезис "нельзя" опровергнут примером (даже несколькими примерами по ходу обсуждения).

Дальнейшее упрямство поциента должно являться предметом интереса у специалистов-мозгоправов.

PS.

·>Это вы заврались. В приведённом тобой коде он не был изменяемым. Точнее, он там вынужденно изменяемый из-за наличия operator=.


Нет. Просто ваш "эквивалент" вовсе и не эквивалент: это и не value type, и не допускает модификацию значения in place.