VC++ 自动说明符假定矢量的引用限定符<bool>::back的引用限定符
VC++ auto specifier assuming reference qualifier for vector<bool>::back
在使用自动规范符上创建一个用vector<bool>::back()
初始化的返回值的变量,该变量具有参考资格。
int main()
{
bool b = true;
bool & j = b;
auto k = j;
k = false; // k is of int type. So, j and i are unaffected.
std::vector< bool > vec = { true };
auto l = vec.back();
vec.pop_back();
l = false; // I get a debug assertion here.
}
k变量具有 bool
的类型,但是变量l具有 std::_Vb_reference<std::vector< bool, std::allocator< bool >>::_Alty >
如果我使用int而不是bool,则自动指定符也适用于向量。
是VC 中的错误?我正在使用Microsoft Visual C 2013。
vector<bool>
是一种特殊的野兽,根本不是矢量。back
不返回引用,而是允许访问向量中的单个位的特殊参考代理对象。由于它是代理人,因此可以做一些正常引用无法做到的其他事情 - 例如检查引用位是否仍然存在。不过,这仅在调试构建中发生(我希望)。
您的问题是由代理对象可复制的事实引起的,并且auto
变量愉快地获取了参考代理的副本,而正确的参考将由编译器删除,并且该变量将是引用值的副本。
相关文章:
- 将对象数组的引用传递给函数
- 写入向量<向量<bool>>
- 如何告诉自动推断向量<bool>元素的非引用类型
- 错误:(49) 在 Android 中使用 OpenCV 原生时未定义对'cv::Stitcher::createDefault(bool)'的引用
- 对 'cv::Stitcher::createDefault(bool)' 的未定义引用
- 通过引用传递基元类型(如 int、bool)是否比按值传递有任何加速?还是会恶化时间/空间的使用
- 升压::可选<bool>取消引用
- 引用 std::atomic <bool>的已删除函数错误
- C 通过引用传递const bool
- VC++ 自动说明符假定矢量的引用限定符<bool>::back的引用限定符
- 通过引用传递bool并使用其最新值
- 使用类型"bool"类型的值初始化类型"int &"(非常量限定)的引用是否是一种黑客?
- 从 std::vector <bool>获取布尔值引用
- 为什么 vector:<bool>:reference 不返回对 bool 的引用?
- c++捕获到bool值错误的引用
- 为什么包含未使用的bool类型会影响char类型的引用?
- 与MSVC 2015比较bool和int引用时发出警告
- 无法解决错误:对类型"bool"的非常量左值引用无法绑定到类型"bool"的临时
- 错误:从类型为"std::vector:<bool>:reference {aka std::_Bit_reference}"的右值初始化类型为"bool&"的非常量引用无效
- 向量如何处理<bool>引用和迭代器?