首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ISO c++17不允许在某种条件下进行结构化绑定声明?

为什么ISO c++17不允许在某种条件下进行结构化绑定声明?
EN

Stack Overflow用户
提问于 2022-09-22 21:04:44
回答 1查看 80关注 0票数 3

如果我使用结构化绑定声明作为条件,Clang会发出警告:

代码语言:javascript
复制
$ cat hello.cc
int main() {
  struct A { int i; operator bool() { return true; } };
  if (auto [i] = A{0}) {
    return i;
  }
  return -1;
}
代码语言:javascript
复制
$ clang++-10 -std=c++17 hello.cc
hello.cc:3:12: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]                                                                                                                                                                               
  if (auto [i] = A{0}) {                                                                                                                                                                                                                                                                               
           ^~~                                                                                                                                                                                                                                                                                         
1 warning generated.

我在dcl.struct.bindstmt.select中没有看到这种情况;在哪里可以看到这是被禁止的呢?

此外:禁止这样做的理由是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-22 21:27:17

if语句的语法是

代码语言:javascript
复制
if constexpr(opt) ( init-statement(opt) condition) statement

如您所见,condition是必需的,而init-statement是可选的。这意味着在if (auto [i] = A{0})中,auto [i] = A{0}是条件,而不是init-statmentcondition被定义为

代码语言:javascript
复制
condition:
    expression
    attribute-specifier-seq(opt) decl-specifier-seq declarator brace-or-equal-initializer

这不允许像语法那样进行结构化绑定。

代码语言:javascript
复制
attribute-specifier-seq(opt) decl-specifier-seq ref-qualifier(opt) [ identifier-list ] initializer ;

好消息是,您可以通过在if语句中添加一个条件来获得所需的信息,例如

代码语言:javascript
复制
if (auto [i] = A{0}; i)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73820660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档