Сообщение Re[8]: Про красивость работы с std::vector от 15.03.2025 12:34
Изменено 15.03.2025 12:41 rg45
Re[8]: Про красивость работы с std::vector
Здравствуйте, T4r4sB, Вы писали:
TB>Я имею в виду такой вариант: https://godbolt.org/z/5q55ofhaj
TB>а вот ставить && при объявлении переменных это шиза конечно
Ну так и в этом варианте не RVO, а перемещение, что и видно по выхлопу.
Вот RVO:
https://godbolt.org/z/ee51sTeez
С практической точки зрения гарантированное RVO, которое ввели, начиная с C++17, позволяет определять кастомные конструкторы за пределами класса. С определёнными ограничениями, конечно же.
TB>Я имею в виду такой вариант: https://godbolt.org/z/5q55ofhaj
TB>а вот ставить && при объявлении переменных это шиза конечно
Ну так и в этом варианте не RVO, а перемещение, что и видно по выхлопу.
Вот RVO:
https://godbolt.org/z/ee51sTeez
#include <vector>
#include <cstdint>
#include <cstring>
#include <cstdio>
struct T {
int value{};
explicit T(int value) : value(value) { printf("T(%d)\n", value);}
~T() { printf("~T(%d)\n", value);}
T(const T&) = delete;
T(T&&) = delete;
T& operator=(const T&) = delete;
T& operator=(T&&) = delete;
};
T takeData(int value)
{
return T(value);
}
int main() {
auto t = takeData(42);
}
С практической точки зрения гарантированное RVO, которое ввели, начиная с C++17, позволяет определять кастомные конструкторы за пределами класса. С определёнными ограничениями, конечно же.
Re[8]: Про красивость работы с std::vector
Здравствуйте, T4r4sB, Вы писали:
TB>Я имею в виду такой вариант: https://godbolt.org/z/5q55ofhaj
TB>а вот ставить && при объявлении переменных это шиза конечно
Ну так и в этом случае не RVO, а перемещение. Что и видно по выхлопу.
Вот RVO:
https://godbolt.org/z/ee51sTeez
С практической точки зрения гарантированное RVO, которое ввели, начиная с C++17, позволяет определять кастомные конструкторы за пределами класса. С определёнными ограничениями, конечно же.
TB>Я имею в виду такой вариант: https://godbolt.org/z/5q55ofhaj
TB>а вот ставить && при объявлении переменных это шиза конечно
Ну так и в этом случае не RVO, а перемещение. Что и видно по выхлопу.
Вот RVO:
https://godbolt.org/z/ee51sTeez
#include <vector>
#include <cstdint>
#include <cstring>
#include <cstdio>
struct T {
int value{};
explicit T(int value) : value(value) { printf("T(%d)\n", value);}
~T() { printf("~T(%d)\n", value);}
T(const T&) = delete;
T(T&&) = delete;
T& operator=(const T&) = delete;
T& operator=(T&&) = delete;
};
T takeData(int value)
{
return T(value);
}
int main() {
auto t = takeData(42);
}
С практической точки зрения гарантированное RVO, которое ввели, начиная с C++17, позволяет определять кастомные конструкторы за пределами класса. С определёнными ограничениями, конечно же.