Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VC++自动说明符假定向量的引用限定符::back_C++_C++11_Visual C++_Reference_Auto - Fatal编程技术网

VC++自动说明符假定向量的引用限定符::back

VC++自动说明符假定向量的引用限定符::back,c++,c++11,visual-c++,reference,auto,C++,C++11,Visual C++,Reference,Auto,使用自动说明符创建一个变量,该变量使用vector::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.b

使用自动说明符创建一个变量,该变量使用vector::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::\u Vb\u reference>::\u Alty>

如果我使用int而不是bool,那么自动说明符也适用于向量

这是VC++中的一个bug吗? 我使用微软Visual C++ 2013。< /p> < p>向量是一种特殊的兽,而不是真的向量。back不返回引用,而是返回一个特殊的引用代理对象,该对象允许访问向量中的单个位。因为它是一个代理,所以它可以做一些普通引用无法做的额外事情,比如检查引用的位是否仍然存在。虽然我希望这只发生在调试版本中

您的问题是由于代理对象是可复制的,并且自动变量愉快地获取引用代理的副本,而编译器将删除适当的引用,并且变量将是引用值的副本。vector是一种特殊的beast,而不是真正的向量。back不返回引用,而是返回一个特殊的引用代理对象,该对象允许访问向量中的单个位。因为它是一个代理,所以它可以做一些普通引用无法做的额外事情,比如检查引用的位是否仍然存在。虽然我希望这只发生在调试版本中

您的问题是由于代理对象是可复制的,并且自动变量愉快地获取引用代理的副本,而编译器将剥离适当的引用,并且变量将是引用值的副本。std::vector不是容器td::vector不是容器