【发布时间】:2017-04-02 01:38:36
【问题描述】:
前奏:
std::tuple<int, int, int> f();
std::tuple<int, int, float, int> g();
C++1z 将引入结构化绑定的语法,这将使编写而不是
成为可能int a, b, c;
std::tie(a, b, c) = f();
类似
auto [a, b, c] = f();
不过,std::tie 也允许指定 std::ignore 以忽略某些组件,例如:
std::tie(a, b, std::ignore, c) = g();
是否可以使用新的结构化绑定语法做类似的事情?它是如何工作的?
【问题讨论】:
-
随便放一个名字就行了。
-
@n.m.任意名称不会创建副本吗?
-
@Piotr 我认为不会比
std::ignore多。由于我们保证了复制省略,因此初始化了虚拟变量;使用std::tie,在分配给std::ignore的右侧的临时值被初始化。 -
可能会有一个宏
auto[IGNORE]生成一个唯一的名称(例如:使用编译器特定的 COUNTER 或 LINE)。它具有足够的可读性,并且在实践中的功能类似于std::ignoreforstd::tie。 -
@PiotrSkotnicki 不,decomp 声明所做的唯一副本是被分解的东西。被声明的事物要么是该事物的成员/元素的别名,要么是绑定到
get返回的引用。
标签: c++ language-lawyer c++17