小编Ber*_*est的帖子

如何在向量增长时强制执行移动语义?

我有一个std::vector特定类的对象A.该类非常重要,并且定义了复制构造函数移动构造函数.

std::vector<A>  myvec;
Run Code Online (Sandbox Code Playgroud)

如果我用A对象填充向量(使用例如myvec.push_back(a)),则向量将增大,使用复制构造函数A( const A&)来实例化向量中元素的新副本.

我可以以某种方式强制执行类的移动构造函数A而不是使用它吗?

c++ resize vector move-semantics c++11

82
推荐指数
2
解决办法
2万
查看次数

迭代枚举类:它可以工作,但它符合标准吗?

在下面的 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)

c++ enums loops

8
推荐指数
1
解决办法
1186
查看次数

标签 统计

c++ ×2

c++11 ×1

enums ×1

loops ×1

move-semantics ×1

resize ×1

vector ×1