To answer the question about auto, firstly, there is no difference in the generated code between:
auto packet = DataPacket();
and
DataPacket packet = DataPacket();
But that is not what you wrote.
- , - packet . , , , packet ( , copy/move .) - packet, , , , , :
struct DataPacket { int i; };
{
DataPacket packet = DataPacket();
++packet.i;
}
{
DataPacket packet;
++packet.i;
}
Xeo , :
auto packet = DataPacket();
DataPacket packet{};
, , , .
, copy/move, ( ) elided, - /. , .