在 if 条件中声明变量有什么问题?

2024-01-13

也许我已经生疏了(最近一直在用Python编写)。

为什么这不能编译?

if ( (int i=f()) == 0)

没有()周围的int i=f()我得到另一个更合理的错误i不是布尔值。但这就是为什么我首先想要括号!

我的猜测是,使用括号将其放入表达式中,并且表达式中不允许使用声明语句。是这样吗?如果是的话,这是 C++ 的语法怪癖之一吗?

顺便说一句,我实际上是想这样做:

if ( (Mymap::iterator it = m.find(name)) != m.end())
    return it->second;

您可以在中声明一个变量ifC++ 中的语句,但仅限于直接初始化,并且需要转换为布尔值:

if (int i = f()) { ... }

C++ 没有任何可以被描述为“声明表达式”的东西,即声明变量的 [sub-] 表达式。

实际上,我只是查了一下标准中的条款,根据 6.4 [stmt.select] 第 1 段,这两种形式的初始化都支持:

...
condition:
   expression
   attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause
   attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list
...

也就是说,也可以这样写:

if (int i{f()}) { ... }

显然,这只适用于 C++2011,因为 C++2003 没有大括号初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 if 条件中声明变量有什么问题? 的相关文章

随机推荐

  • 我想在数组中添加项目

    我正在尝试在空数组中添加项目 我正在使用 Dio 包发送 post 请求 所有其他代码都工作正常 但我在这里对这个问题很困惑 我拿了一个空数组 然后我尝试 setState 函数将项目添加到空列表中 每次按下列表时我都会打印该列表 但我得到
  • c++ 将没有时区的postgres时间戳转换为time_t

    我使用 libpq 库从 C 连接到 postgreSQL 我从 postgreSQL 请求并获取日期 没有时区的时间戳 但结果有一个我不知道如何修复的偏移量 Postgres 表 id date integer timestamp wit
  • Redis lua脚本不工作

    我创建了一个 redis lua 脚本来根据关键数据类型执行命令 local keyType redis call TYPE KEYS 1 if keyType string then return redis call GET KEYS
  • 有没有好的 Perl 自动化测试套件? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些好的 Perl 自动化测试套件框架吗 这实际上取决于您想要做什么 但这里有一些背景知识
  • 如何在 Android 中创建两个视图,每个视图使用 50% 的高度,除非其中一个较小?

    想象一个完整的 Android 设备屏幕 我希望它分为两个部分 上半部分包含文本 该文本可能大于可用空间 或不大于可用空间 因此文本将滚动 即 ScrollView 内的 TextView 下半部分包含一个 MapView 控件 具体看一些
  • joda - 解析 RSS 项目中 pubDate 的时区

    我正在使用 Joda 解析 RSS 项目中的 pubDate 日期必须采用 RFC 822 格式 http feed2 w3 org docs error InvalidRFC2822Date html http feed2 w3 org
  • JOGL白色质感?

    我正在尝试加载 Earth png 并将其放置在三角形上 图像尺寸为 256x256 我已经按照在线教程进行了几个小时的研究 但三角形仍然保持白色 任何人都可以指出我正确的方向吗 import java awt Frame import j
  • 如何在 C# 中生成 HMAC 签名

    我正在尝试与第 3 方 API 集成 该 API 需要对我的请求正文和一些变量进行加密 并使用 HMAC 签名进行授权 他们为我提供了示例 JavaScript 代码 function generateHMACSignature partn
  • 一般错误:1364 字段“user_id”没有默认值[重复]

    这个问题在这里已经有答案了 我试图将 user id 分配给当前用户 但它给了我这个错误 SQLSTATE HY000 General error 1364 Field user id doesn t have a default valu
  • Oracle RAW id 列和 JDBC

    我正在尝试开发一个调用 Oracle 11g XE 数据库的简单 Java servlet 我提供的数据库对所有表上的 ID 使用 RAW 列类型 最初 我尝试从 JDBC 获取数据 并对返回的 VARBINARY 字节数组进行 base6
  • 在 Firebase Firestore 中执行简单的选择查询

    如何在 Firebase Firestore 中执行简单搜索以检查集合中是否存在记录 我在文档中看到过这段代码 但它并不完整 Create a reference to the cities collection var citiesRef
  • 等于/等于和 == 运算符之间的区别?

    有什么区别a b and a Equals b 假设类型a and b是参考类型 在 Java 中 总是会比较identity 即两个值是否是对同一对象的引用 这也称为引用相等 Java 没有任何用户定义的运算符重载 在 C 中 这取决于情
  • 标准是否指定哪些标头包含其他标头?

    我正在参加一个在线编码竞赛 我的想法是找到一个名称比
  • 导入具有可变标头的 Excel 文件

    我有 SSIS 包 它将把 excel 文件加载到数据库中 我创建了 Excel Source 任务来将 Excel 列名称映射到数据库表列名称 并且其工作正常 在极少数情况下 我们收到带有一些空格的 Excel 文件列名称 例如 列名称是
  • pszBuffer 或类似内容中的“psz”代表什么?

    我知道这有点偏离主题 但我相信无论如何我都能在这里得到答案 什么是 psz 代表在pszBuffer或者C C 系统库中的类似变量 我看到很多变量都带有 前缀 psz 它看起来像一个图案 Thanks This is 匈牙利表示法 http
  • Android xml 形状声明中的滑稽错误

    我正在创建一个形状用作按钮背景 我正在制作一条按钮 左边的按钮在左边有圆角 右边的最后一个在右边有圆角 这非常简单 API 文档向您展示了如何做到这一点 然而 当我使用android topLeftRadius and android bo
  • 请求 JSF 页面时无限 setStatus() 循环

    您好 我已将我的配置和库升级到 hibernate 4 spring 3 1 1 richfaces 4 我在 tomcat 7 上运行 但是当我尝试打开索引页时 服务器运行一个循环 当我尝试在 ViewHandlerResponseWra
  • 如何更改 Huggingface 变压器默认缓存目录

    默认缓存目录磁盘容量不足 我需要更改默认缓存目录的配置 您可以在每次加载模型时指定缓存目录 from pretrained https huggingface co transformers main classes model html
  • Jetpack Compose Text 组件中的等宽数字

    我在 Jetpack Compose 应用程序中使用自定义字体 并且希望将特定文本组件中的数字等宽 对于标准 Android TextView 可以使用fontFeatureSetting tnum 属性 https stackoverfl
  • 在 if 条件中声明变量有什么问题?

    也许我已经生疏了 最近一直在用Python编写 为什么这不能编译 if int i f 0 没有 周围的int i f 我得到另一个更合理的错误i不是布尔值 但这就是为什么我首先想要括号 我的猜测是 使用括号将其放入表达式中 并且表达式中不