假设我有一个包含以下成员的类
QVector<bool> m_vector;然后在构造函数上,我可以这样做
m_vector.resize(SIZE);
for (int i = 0; i < SIZE; ++i)
m_vector[i] = false;或(更短)
m_vector = QVector(SIZE, false);越短越好,越短越好?或者评估操作员告诉我有一个(不必要的)复制正在进行,而我更喜欢非较短的方法?
发布于 2021-02-14 13:52:50
这两种方法都工作得很好,但第二种/更短的方法更好,因为它需要的代码更少,因此出错的机会也更少。至于性能,“不必要的复制”几乎肯定会被实现为构造和值,而不是复制(因为QVector(SIZE, false)是一个右值),这意味着它的效率并不比第一个示例低很多。特别是,SIZE元素的数组将从临时QVector对象中窃取并交给m_vector采用,而不是被(创建、复制,然后销毁)。
也就是说,最好的方法是在类构造函数的初始化器列表中初始化m_vector对象,如下所示:
MyClass :: MyClass()
: m_vector(SIZE, false)
{
}..。这样,调整大小/默认填充是作为m_vector原始构造的一部分完成的,而不是作为后续的单独步骤。
https://stackoverflow.com/questions/66192781
复制相似问题