如何告诉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参数的函数。

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

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
1个回答
0
投票
作为cppreference says,向量以位而不是字节存储值:
© www.soinside.com 2019 - 2024. All rights reserved.