结构化绑定声明引入的唯一命名变量的作用域和生命周期是什么?
结构化绑定隐式变量
e的作用域与生命周期问题 结构化绑定声明引入的那个唯一命名变量(标准文档中称其为e),它的作用域与生命周期是什么?
根据C++标准中[dcl.struct.bind]p1的描述:
结构化绑定声明会将标识符列表中的
v0、v1、v2……作为结构化绑定的名称引入。设cv代表声明说明符序列中的cv限定符,S包含声明说明符序列中的存储类说明符(如果存在)。包含volatile的cv已被弃用;参见[depr.volatile.type]。首先会引入一个名为e的唯一命名变量。若初始化器中的赋值表达式具有数组类型cv1A且无引用限定符,则e的定义如下:attribute-specifier-seq_opt S cv
A e ;[……]
标准后续段落仅讨论了该变量的初始化逻辑,但除了提到存储类说明符可能赋予其静态/线程存储时长外,并未明确说明e的生命周期细节。
我有以下疑问:
- 能否认为
e的作用域就是结构化绑定所在的作用域? - 结构化绑定的标识符(比如示例中的
x、y)的作用域是否也是如此?(不过我理解,标识符本身不存在生命周期的概念) - 这种“隐式声明变量的作用域与所在构造的作用域一致”的规则,是否普遍适用于所有隐式声明场景?比如基于范围的for循环中的隐式变量?
示例代码:
struct s { int x; int y; }; s bar(); void foo() { { auto [x, y] = bar(); } // 这里的`e`会在这个作用域结束时被销毁吗? }
内容的提问来源于stack exchange,提问作者dyp
相关产品推荐
相关产品推荐

