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

Сообщение Re[2]: cref<> in<> от 04.02.2023 17:24

Изменено 04.02.2023 17:26 rg45

Re[2]: cref<> in<>
Здравствуйте, Sm0ke, Вы писали:

S>https://cpp.godbolt.org/z/ETjzoKhKj


S>cref<T> это простой алиас на const T &


S>
S>template <typename T>
S>using cref = const T &;
S>


http://coliru.stacked-crooked.com/a/308af58edc86d8bc
  Код примера
#include <iostream>

template <typename T>
using cref = const T &;

template <typename T>
cref<T> make_cref(T&& t) { return cref<T>(t); }

void test(const int& i) { std::cout << "Non-mutable: " << i << std::endl; }

void test(int& i) { std::cout << "Mutable: " << ++i << std::endl; }

int main()
{
    int i = 42;

    test(make_cref(i)); // -> Mutable: 43
}


S>std::array мувать смысла видимо нет, вот для него и ref<> сойдёт.


Ну, как посмотреть. Если это std::array<std::unique_ptr<HardThing>>, то очень даже имеет.
Re[2]: cref<> in<>
Здравствуйте, Sm0ke, Вы писали:

S>https://cpp.godbolt.org/z/ETjzoKhKj


S>cref<T> это простой алиас на const T &


S>
S>template <typename T>
S>using cref = const T &;
S>


http://coliru.stacked-crooked.com/a/308af58edc86d8bc
  Код примера
#include <iostream>

template <typename T>
using cref = const T &;

template <typename T>
cref<T> make_cref(T&& t) { return cref<T>(t); }

void test(const int& i) { std::cout << "Non-mutable: " << i << std::endl; }

void test(int& i) { std::cout << "Mutable: " << ++i << std::endl; }

int main()
{
    int i = 42;

    test(make_cref(i)); // -> Mutable: 43
}

Зачем это нужно вообше? Чтоб еще больше запутать тех, кто и так путается?

S>std::array мувать смысла видимо нет, вот для него и ref<> сойдёт.


Ну, как посмотреть. Если это std::array<std::unique_ptr<HardThing>>, то очень даже имеет.