在示例A中使用的移动语义是否必要,哪个结构体更优?
示例A:
struct A
{
std::string a;
A( std::string a ) : a( std::move(a) ){ }
};
例子 B:
struct B
{
std::string b;
B( const std::string& b ) : b( b ){ }
};
我不认为这是一个重复的问题。我特别询问从使用类构造函数中的成员初始化的角度来看哪个示例更好。在其他问题中列出的示例或答案都没有涉及成员初始化。
我不喜欢构造函数使用引用参数,然后将其复制到成员中。这似乎会浪费多次复制操作。
我希望以尽可能高效的方式将数据“导入”成员,但我不想将rvalue作为构造函数参数。
int
或其他单值基本类型,使用move
或引用(无论是 const 还是其他方式)都是无意义的。此外,考虑在这种情况下不使用显式构造函数的结构体,因为聚合初始化在这里完全可以胜任。 - ShadowRangerint
来简化。如果使用std::string
或其他更复杂的类,哪个更优?(我修改了我的答案并将int
更改为std::string
) - Dustin NieffeneggerA(std::string&&)
。 - Jarod42