我正在编写一个需要返回多个变量的函数,其中一个是位集。然后我遇到了一些奇怪的编译错误。
我尝试了不同的编译器,尽管它们带有不同的消息,但它们都会产生错误。
我尝试使用谷歌搜索,这似乎与公共和私有继承有关。但是我认为它不会以任何方式影响这段代码。
简化的代码(C ++ 17)如下所示:
#include <bitset>
auto f() { return bitset<100>(); }
int main()
{
auto [a] = f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我删除方括号(即删除结构化绑定并使用普通自动),则它可以工作。
错误信息如下:
source.cpp:在函数'int main()'中:
source.cpp:9:18:错误:'std :: _ Base_bitset <2>'是'std :: bitset <100>'的不可访问基础
9 | auto [a] = f();
| ^
Run Code Online (Sandbox Code Playgroud)
编译器返回:1
所以我的问题是:这是预期的行为还是我做错了什么?欢迎提出建议。
有三种类型可用于结构化绑定:
tuple_size和tuple_element和的过载get)std::bitset这些都不是。它的规范没有说明其成员是什么,也没有提供元组协议的选择加入。因此,它不适用于结构化绑定。预期auto [a] = f(); 会失败。
如果有的话,为什么bitset<100>只提供一个绑定?我希望如果它提供绑定,它将提供100个绑定...
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |