0

我得到一个 C2440('initializing' : cannot convert from 'std::_Vb_reference<_Alloc>' to 'bool &'),IntelliSense 将其转换为标题中的错误。

我明白这个错误在说什么,只是不知道为什么这么说。下面的代码会产生这个错误:

std::vector<const UINT>::iterator oIter;

oIter = std::find(vecuClassID.begin(), vecuClassID.end(), uClassID);

const UINT uDistance = std::distance(vecuClassID.begin(), oIter);

bool& refbStaticSectionInitialized = *(vecbStaticSectionInitialized.begin() + uDistance);

错误似乎发生在最后一行 - 在 Visual Studio 中,取消引用运算符带有红色下划线。这很令人困惑,因为我的代码与 CRITICAL_SECTION 执行完全相同的操作,并且不会产生错误:

std::vector<const UINT>::iterator oIter;

oIter = std::find(vecuClassID.begin(), vecuClassID.end(), uClassID);

const UINT uDistance = std::distance(vecuClassID.begin(), oIter);

CRITICAL_SECTION& refhStaticSection = *(vechStaticSection.begin() + uDistance);

它与 bool 是原始的有关吗?

4

1 回答 1

6

问题是它std::vector<bool>不会bool&从其下标运算符或取消引用其迭代器时返回。相反,返回的类型是std::vector<bool>::reference转换bool&.

背后的错误想法std::vector<bool>是调整界面以允许打包表示。由于位不可寻址,std::vector<bool>::reference因此可用作位的代理。

于 2013-11-01T23:36:26.833 回答