structured-bindings相关内容
假设我们有一个名为AAA的类,它同时支持复制/移动: class AAA { public: AAA() = default; ~AAA() = default; AAA(const AAA& rhs) { std::cout
..
强制复制省略是否适用于通过结构化绑定的分解?这适用于以下哪些情况? // one auto [one, two] = std::array{SomeClass{1}, SomeClass{2}}; // two auto [one, two] = std::make_tuple(SomeClass{1}, SomeClass{2}); // three struct
..
我知道我可以做到 auto&& bla = something(); 根据something返回值的const程度,我会为bla获取不同的类型。 这是否也适用于结构化绑定的情况,例如 auto&& [bla, blabla] = something(); 我想是的(结构化绑定搭载在auto初始值设定项上,其行为如下),但我找不到明确的“是”。 更新:初步测试似乎达到
..
使用以下代码,我得到一个编译错误 C2065 'a': undeclared identifier(使用 Visual Studio 2017): [] {自动 [a, b] = [] {返回 std::make_tuple(1, 2);}();auto r = [&] {return a;}();//错误C2065}(); 但是,以下代码编译: [] {整数a,b;std::tie(a,
..
使用以下代码,我收到编译错误 C2065 'a': undeclared identifier(使用 Visual Studio 2017): [] {auto [a, b] = [] {return std::make_tuple(1, 2);}();汽车 r = [&] {返回一个;}();//错误C2065}(); 但是,以下代码可以编译: [] {国际a, b;std::tie(a,
..
结构化绑定使遍历具有如下范围的for循环的地图的迭代更加清晰易读 表示(自动[键,值]:映射){cout
..
我总是避免像下面这样的初始化 const auto&x = a,y = b;const int * const x = ptr_1,* const y = ptr_2;//wot 由于引用限定符和指针限定符不适用于两个初始化.既然这是初学者学习的第一手东西,它的含糊不清让我感到以下内容更加清晰,并且不需要读者多加思考 const auto&x = a;const auto&y = b;
..
我正在尝试为类支持类似元组的结构化绑定访问.为简单起见,在本文的其余部分中,我将使用以下类: struct测试{整数v = 42;}; (我知道该类支持开箱即用的结构化绑定,但让我们假设它不支持.) 要启用对元组的访问权限 Test的成员,我们必须专门处理 std :: tuple_size 和 std :: tuple_element : 命名空间标准{模板struct tu
..
为什么 std :: initializer_list 不支持 std :: get , std :: tuple_size 和 std::tuple_element ?像现在一样,它在 constexpr 表达式中经常使用,例如 std :: max({1、2、3、4、5}); 如果它做得很酷,可能会发生以下情况 auto [x,y] = {1,2}; 那么为什么 std :
..
在c ++ 17(也许是C ++ 2a)中,有什么比用结构化绑定?有什么提示吗?我可以接受一个答案,为什么我不能在这里使用这些提到的C ++ 17功能-但我更喜欢“解决方案". 解决方案 自C ++ 14起,我们具有通用的lambda,而自C ++ 17起,我们具有有效的折叠表达式和 std :: apply 隐藏通常的拆包逻辑: std :: apply([](auto& ... i
..
请考虑以下代码段,以测试即将到来的C ++ 17功能分解声明(以前称为结构化绑定) #包括 #include constexpr auto divmod(int n,int d) { return std :: make_pair(n / d,n%d); //在g ++ 7中,也只是std :: pair {n / d,n%d} }
..
是否编写 const auto& [a,b] = f(); 确保延长从 f()返回的对象或至少对象 a 和 b 是否绑定到?阅读该提案,我看不到任何明显的内容除非另有说明,否则请确保使用该语言。但是,以下内容不会延长临时文件的生存期,因此我看不到它将如何涵盖: const auto& a = std :: get(f()); 在本文的顶部,似乎表明已将其覆盖
..
据我所知,C ++ 17中结构化绑定引入的标识符实际上是对某些“隐藏”变量的引用。这样 auto [a,b] = std :: make_tuple(1,2); 等同于 auto e = std :: make_tuple(1,2); 自动& a = std :: get(e); 自动& b = std :: get 1(e); 但
..
给出以下声明: int a [3] {10,20,30}; std :: tuple b {11,22,33}; 我可以使用结构化绑定声明来解码 a 和 b : auto [x1,y1,z1] =一种; auto [x2,y2,z2] = b; 但是如果 x1 , y1 等已经存在,该怎么办? st
..
假设我有一个对象类型 std :: map>数据; 是否有可能以嵌套方式访问元素类型(即,在range循环中使用)像这样 为(auto [str,[my_int,my_float]]:data)/ *做某事* / 解决方案 不行,不可能。 我清楚地记得在某处
..
我想使用结构绑定遍历地图,而忽略键: for(auto& [unused,val] :my_map) do_something(val); 我用gcc-7.2.0尝试了不同的选择: //发出警告 用于([[maybe_unused]] auto& [unused,val]:my_map) do_something(val) ; //语法错误 (自动&
..
C ++ 17标准引入了新的结构化绑定功能,最初在2015年建议及其句法 。外观广泛地稍后进行了讨论。 在阅读文档时会立即想到它们的某些用途。 聚集分解 我们声明一个元组: std :: tuple t(42,“ foo”); 使用结构化绑定在一行中可以轻松获得命名的元素副本: auto [i,s] = t;
..
在将 std :: minmax 与结构化绑定一起使用时,我遇到了一个相当微妙的错误。似乎传递的右值不会总是像人们期望的那样被复制。最初,我在自定义容器上使用了 T运算符[]()const ,但它与文字整数似乎相同。 #include #include #include int main() { auto [am
..
我一直在编写一组类,以实现简单的类似于python的 zip 函数。以下代码段(几乎)按预期工作。但是,两个变量 a 和 b 不是 const std :: vector。 v1 {0.0,1.1,2.2,3.3}; std :: vector v2 {0,1,2}; for(auto const& [a,b]:zip(v1,v2)) { st
..
我试图理解C ++ 17中引入的结构化绑定。 cppreference 的解释对我来说并不明显,但看起来像 cv-auto ref-operator [x,y,z] = ... 大致等于(不考虑数组大小写) cv-auto ref-operator unique_name = ... #定义x unique_name.member_a #定义y unique
..