Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
C++ 为什么自动推断std::bitset::operator[]的引用对象而不是bool_C++_C++11_Bitset - Fatal编程技术网

C++ 为什么自动推断std::bitset::operator[]的引用对象而不是bool

C++ 为什么自动推断std::bitset::operator[]的引用对象而不是bool,c++,c++11,bitset,C++,C++11,Bitset,我有以下代码 std::bitset<32> bs{21}; auto ref_obj = bs[0]; auto &another_ref = bs[0]; bool bool_obj = bs[0]; std::位集bs{21}; 自动参考对象=bs[0]; 自动&另一个_ref=bs[0]; bool bool_obj=bs[0]; ref_obj的类型不是bool。但是另一个\u ref的类型与ref\u obj相同std::bitset::operator[]在

我有以下代码

std::bitset<32> bs{21};
auto ref_obj = bs[0];
auto &another_ref = bs[0];
bool bool_obj = bs[0];
std::位集bs{21};
自动参考对象=bs[0];
自动&另一个_ref=bs[0];
bool bool_obj=bs[0];
ref_obj
的类型不是
bool
。但是
另一个\u ref
的类型与
ref\u obj
相同
std::bitset::operator[]
在下面列出了3个重载


但是我不明白为什么会这样。

根据C++11标准,如果您的位集不是
常量(而您的位集不是),则返回一个引用类型:

§20.6.2位集操作:

constexpr bool operator[](size_t pos) const; // for b[i];
reference operator[](size_t pos); // for b[i];

< > C++中的最小可寻址类型是一个字节,它大概是至少8位。因此,无法返回对单个位(小于1字节)的引用。因此,当您需要引用它时,将返回一个执行一些黑魔法的代理


您的对象不是
const
,因此假定您可能希望通过
[]
操作符修改元素。您可以将其强制转换为
常量
引用,并访问
常量
限定成员重载。

查看重载2(
引用运算符[](std::size_t pos);
)。您的对象不是
const
。是。我想就是这样。