我有一个std::vector特定类的对象A.该类非常重要,并且定义了复制构造函数和移动构造函数.
std::vector<A> myvec;
Run Code Online (Sandbox Code Playgroud)
如果我用A对象填充向量(使用例如myvec.push_back(a)),则向量将增大,使用复制构造函数A( const A&)来实例化向量中元素的新副本.
我可以以某种方式强制执行类的移动构造函数A而不是使用它吗?
在下面的 C++ 代码+输出中,以下内容用于迭代枚举类的值,例如 MyEnumClass:(枚举类具有连续值)
for (const auto& e : MyEnumClass() )
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
为了使基于范围的 for 循环正常工作,我必须定义运算符 ++ 和 *,以及 begin(MyEnumClass) 和 end(MyEnumClass)。
尽管这有效,但我无法确定这是否是合法的方法。是否符合C++标准?我理解运算符和开始/结束,但是 MyEnumClass() 这里的真正含义是什么?
我希望有人可以阐明这一点。
问候, 伯特维姆
#include <iostream>
enum class MyEnumClass : int
{
BEGIN,
ONE=BEGIN, TWO, THREE, FOUR, // consecutive values!
END
};
auto begin( MyEnumClass )
{
return MyEnumClass::BEGIN;
}
auto end( MyEnumClass )
{
return MyEnumClass::END;
}
MyEnumClass operator++( MyEnumClass& p )
{
return p = static_cast<MyEnumClass>( static_cast<unsigned>( p ) + 1 ); …Run Code Online (Sandbox Code Playgroud)