gpt4 book ai didi

c++ - VC++ 自动说明符假定 vector::back 的引用限定符

转载 作者:行者123 更新时间:2023-11-30 01:41:23 24 4
gpt4 key购买 nike

关于使用自动说明符创建一个用 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,自动说明符也适用于 vector。

这是 VC++ 中的错误吗?我正在使用 Microsoft Visual C++ 2013。

最佳答案

vector<bool>是一种特殊的野兽,根本不是 vector 。 back不返回引用,而是返回一个特殊的引用代理对象,它允许访问 vector 中的单个位。由于它是一个代理,它可以做一些普通引用不能做的额外事情——比如检查引用的位是否仍然存在。不过,这只发生在调试版本中(我希望如此)。

您的问题是由代理对象可复制和 auto 引起的变量愉快地获取引用代理的拷贝,而正确的引用将被编译器剥离,变量将是引用值的拷贝。

关于c++ - VC++ 自动说明符假定 vector<bool>::back 的引用限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41298986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com