如何告诉auto来推导vector ]的元素的非引用类型。 这里是代码: int main() { std::vector<bool> b(5,false); auto b0=b[0]; cout<<b0; b[0]=true; cout<<b0; std::vector<int> i(5,false); auto i0=i[0]; cout<<i0; i[0]=true; cout<<i0; return 0; } 0100 变量b0具有引用类型(std :: _ Bit_reference),而i0是常规int。告诉自动推断某些非引用类型(例如bool)的正确语法是什么? 这里是代码:int main(){std :: vector b(5,false);自动b0 = b [0]; cout << [i(5,false);自动i0 = i [0]; ... 您将获得std::_Bit_reference,因为对于std::vector模板专业化(即bool),std::vector<bool>具有“可能”的节省空间的实现。 作为cppreference says,向量以位而不是字节存储值: 实现std :: vector空间高效(以及是否进行了优化)的实现方式已定义。一种潜在的优化方法是合并矢量元素,以使每个元素占据单个位,而不是sizeof(bool)个字节。 [templatetypedef曾说过,auto可以推断出第一件事,这恰好是从钻头获取布尔值的一种奇特类型。 将类std :: vector :: reference公开为访问各个位的方法。特别是,此类的对象由operator []按值返回。 >operator bool() const; >(until C++11) >operator bool() const noexcept; >(since C++11) >Returns the value of the referenced bit. 它可以隐式转换为bool(AFAIK),因此您不必担心将其传递给需要bool参数的函数。 auto使用模板规则进行类型推导。您无法更改。如果这不是您想要的,请不要使用auto而是手动写出类型] 即使remove_reference也无法删除参考: #include <iostream> #include <vector> #include <typeinfo> using namespace std; int main() { std::vector<bool> b(5,false); std::remove_reference< decltype(b[0])>::type b0=b[0]; cout<<typeid(b0).name()<< b0; b[0]=true; cout<<b0; return 0; } St14_Bit_reference01

问题描述 投票:1回答:3
这里是代码:

int main() { std::vector<bool> b(5,false); auto b0=b[0]; cout<<b0; b[0]=true; cout<<b0; std::vector<int> i(5,false); auto i0=i[0]; cout<<i0; i[0]=true; cout<<i0; return 0; } 0100

变量b0具有引用类型(std :: _ Bit_reference),而i0是常规int。告诉自动推断某些非引用类型(例如bool)的正确语法是什么?

这里是代码:int main(){std :: vector

b(5,false);自动b0 = b [0]; cout << [i(5,false);自动i0 = i [0]; ...

c++ c++11 auto
3个回答
2
投票
作为cppreference says,向量以位而不是字节存储值:

0
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.