Size: a a a

2021 July 06

DP

Denis Paukaev in supapro.cxx
например msvs там держит HANDLE потока
источник

d

disba1ancer in supapro.cxx
Ладно хоть не unspecified
источник

d

disba1ancer in supapro.cxx
И правильно делает...
источник

C

Chuvi in supapro.cxx
Спасибо, схоронил
источник

AG

Alex Green 𓆏 in supapro.cxx
Ребят, осваиваю семантику перемещения и не могу найти ответ на волнуюший вопрос. Может ли быть универсальный конструктор копирования и универсальный оператор присваивания в классе? Если есть класс MyClass с одним полем int x и конструкторами:

MyClass(MyClass&& other) noexcept : x_(move(other.x_)) {}MyClass(const MyClass& other) : x_(other.x_){}

То как будет выглядеть универсальная версия (через универсальную ссылку), чтобы заменить эти 2 на 1?  Я представляю это типа:

template <typename T>
MyClass(T&& mc);
источник

LA

Liber Azerate in supapro.cxx
А как ты хочешь совместить ссылку на константу и рвалью ссылку?
источник

AG

Alex Green 𓆏 in supapro.cxx
А, логично. Это единственная причина, по которой универсальных конструкторов и операторов класса не бывает или есть еще глубже что-то?
источник

DP

Denis Paukaev in supapro.cxx
так чем тебе это не универсальный?

template <typename T>
MyClass(T&& mc);
источник

T

Ternvein in supapro.cxx
То же самое можно про паттерны проектирования сказать.
источник

AG

Alex Green 𓆏 in supapro.cxx
Так выше ответили, что константная ссылка не пройдет
источник

DP

Denis Paukaev in supapro.cxx
с чего бы?
источник

LA

Liber Azerate in supapro.cxx
Вообще, нет, копи конструктор может быть и с просто ссылкой. Но я пока смотрю возможно ли это с шаблоном
источник

O

Ofee in supapro.cxx
А вы попробуйте. Только потом не move, а std::forward
источник

DP

Denis Paukaev in supapro.cxx
ну мув там конечно не должен быть
источник

DP

Denis Paukaev in supapro.cxx
struct S {
   S() = default;

   template<typename T, std::enable_if_t<std::is_same_v<S, T>>* = nullptr>
   S(T&& t) {}
};

int main() {
   const S s1;
   S s2{s1};
   S s3{s2};
}
источник

DP

Denis Paukaev in supapro.cxx
но в целом никаких проблем нет
источник

LA

Liber Azerate in supapro.cxx
И... Это не будет работать. Рекомендую проверить. Будут использованы дефолтные
источник

DP

Denis Paukaev in supapro.cxx
ага, надо внимательнее посмотреть что ему там не нравится, в случае с обычной функцией например всё ок
источник

LA

Liber Azerate in supapro.cxx
Думаю, не нравится ему слово non-template
http://eel.is/c++draft/class.ctor#class.copy.ctor-1
источник

С

Сэр MSTR in supapro.cxx
Может быть кто нибудь знает

чем будет отличаться на уровне машинного кода инициализация членов класса через список инициализации и через присваивание им значений в теле конструктора?

Мне говорили что есть разница, но что-то я не могу ее увидеть

Изменение значения области памяти в обоих случаях будет производиться через mov, в обоих случаях извлекаться из стека и в обоих случаях в памяти до этого будет находиться мусор,

Буду благодарен, если кинете в меня ссылкой где об этом можно почитать
источник