C++“重载”if() 语句

2024-03-25

是否有可能改变if()以便:

class Foo {
    int x;
};

Foo foo;
if(foo)

仅当价值x是不是零的东西?或者...

到 int 的显式用户定义类型转换是否有效/这是一种合适的方法吗?或者...

最好做类似的事情if(foo.getX())?


您可以通过定义将对象转换为布尔值operator bool():

explicit operator bool() const 
{ 
    return foo.getX(); 
}

The explicit关键字可防止隐式转换Foo to bool。例如,如果你不小心把foo在像这样的算术表达式中foo + 1,如果您声明,编译器可以检测到此错误operator bool() as explicit, 否则foo将被转换为bool即使不是故意的。

一般来说,形式的成员函数

operator TypeName()

(带有可选的explicit and const限定符)是转换运算符。它允许您将类转换为由指定的任何类型TypeName。另一方面,带有一个参数的构造函数允许您将任何类型转换为您的类:

class Foo {
  Foo(int x);    // convert int to Foo
  operator bool() const;  // convert Foo to bool
  int x;
};

这定义了您的类的隐式转换。如果可能的话,编译器会尝试应用这些转换(就像它对内置数据类型所做的那样,例如5 + 1.0)。您可以将它们声明为explicit抑制不需要的隐式转换。

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

C++“重载”if() 语句 的相关文章

随机推荐

  • 为什么 setLastModified(time) 对此文件不起作用?

    为什么下面代码中的文件日期没有改变 fLocal location C 中的现有文件 fLocal date 以长整型设置的日期 boolean x new File fLocal location setLastModified Long
  • 在 Ubuntu 中从 CSV 复制到 Postgres

    我的问题与此类似one https stackoverflow com q 14083311 1777654但在 Linux Mint 15 Ubuntu 中 我已经尝试过标准COPY http www postgresql org doc
  • Laravel:字符串数据,右截断:1406 数据对于列来说太长

    我有一张桌子 上面有一列 酒店 该项目是在 Laravel 5 4 中创建的 因此我使用了 Migrations table gt string hotel 50 这是 MYSQL VARCHAR 50 它运作良好 因为当我开发时 我使用了
  • Android 操作系统认为应用程序在调试期间处于断点时没有响应

    我不确定这是否是 Android studio 2 0 的问题 还是因为我正在开发的这个新应用程序中存在一些奇怪的项目设置 当我在调试期间停在断点处时 操作系统会向我显示一个对话框 指出应用程序没有响应 并让我选择等待或终止应用程序 然后过
  • 安全方法为无安全性,但不允许页面提取和文档组装

    我有一个非常奇怪的问题 我不确定问题出在哪里 我正在创建 PDF 但未设置任何安全限制或密码 当我在 Adob e Reader DC 中打开 PDF 并获取属性时 它确实将安全方法显示为 无安全 但是 文档组装和页面提取设置为不允许 PD
  • 即席查询和存储过程哪个更好? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • btree是如何存储在光盘上的?

    我知道如何在内存中实现b树 但不清楚如何在光盘中存储trie 我认为主要有两点区别 内存指针和磁盘地址之间的转换 看这个 插入新的k v项时如何拆分页面 在内存中很容易实现 Thanks 这完全取决于您使用的 DBMS 如果您想知道它是如何
  • angular-cli 库创建辅助入口点

    我正在尝试创建我认为所谓的 Angular npm 包的辅助入口点 我想要以下两个入口点 scope data service scope data service models 使用 angular cli 生成基础包生成以下结构 sco
  • linq 中的简单选择查询

    假设我有一个学生表 我想显示 ID 为 1 的学生 SELECT FROM STUDENT ST WHERE ST ID 1 这就是我在 Linq 中实现这一目标的方法 StudentQuery from r in oStudentData
  • VBA - 冒号“:”如何在带有条件的 VBA 代码中工作

    冒号运算符 是VBA中的语句分隔符 但是 有谁知道为什么前三个示例有效而第四个示例 未注释时 会产生错误 Option Explicit Public Sub TestMe If 1 1 Then Debug Print 1 If 2 2
  • 如何将 .txt 读入 Python 对象列表?

    我正在尝试使用 Python 制作纸牌游戏 下面有这个文本文件 其中包括卡 ID 卡名称 卡描述和卡生命值 1 Medusa Feel The Wraith 98 2 Gigle See Him See Him 54 3 Brozi Pin
  • 使用 VLC imem 从内存播放 h264 视频文件但收到错误“主流错误:无法预填充缓冲区”

    我有一个加载到内存中的 h264 视频文件 我尝试使用参数 imem cat 4 使用 imem 播放它 以便 vlc 将使用访问模块来解复用视频 并且 vlc 启动并接收我的 imem参数成功 0x7f38a0000e28 access
  • 如何使用Protocol-buffer在Java中反序列化文件?

    想要在 C 中创建序列化文件 然后想在 Java 中反序列化该文件 为此 我正在使用 Protocol buffer 库 我想要做的是 在 C 中 我添加了 protobuf net dll 要序列化的类表示为 人物 cs ProtoBuf
  • 在 Android 中禁用 Spinner

    我在使用时遇到问题android enabled false 它不是禁用 the 成分在这种情况下 它是spinner 不知道它是否相关 但它属于布局的一部分viewflipper 有任何提示或解决方法吗 Thanks 在设置适配器之前禁用
  • 反转 Map 最简洁的 Scala 方法是什么?

    反转 Map 最简洁的 Scala 方法是什么 映射可能包含非唯一值 EDIT 的逆转Map A B 应该给Map B Set A 或者 MultiMap 那就更好了 如果您可能丢失重复的密钥 scala gt val map Map 1
  • 如何使用代理设置部署 Angular 应用程序

    我有一个代理配置文件 其中有 API 网络服务 链接到目标以调用我们的数据库 此代理配置在本地使用正常工作npm 启动 现在我需要将此应用程序部署到 IIS 上的生产 Windows 服务器 我用了ng build and ng 构建 pr
  • 如何使用 CruiseControl.Net 构建忽略可执行文件的输出?

    我正在运行一个名为 fart exe 的小型查找和替换实用程序 是的 是放屁 如 查找和替换文本 中所示 作为我的 CC 构建的一部分 效果很好 问题是 FART 在工作时会显示一个由管道 破折号 斜线组成的小 ASCII 旋转器 没有办法
  • LINQ Join On Between 子句

    我在组合 LINQ 查询 将根据邮政编码连接表 时遇到一些问题 我需要根据客户的邮政编码是否位于由 ZIPBEG 和 ZIPEND 列确定的邮政编码范围内来加入表 T SQL 看起来像这样 JOIN ZipCodeTable zips ON
  • Angular 2 和浏览器自动填充

    我正在使用 Angular 反应式表单实现登录页面 如果表单无效 登录 按钮将被禁用 import Component OnInit from angular core import FormBuilder FormGroup Valida
  • C++“重载”if() 语句

    是否有可能改变if 以便 class Foo int x Foo foo if foo 仅当价值x是不是零的东西 或者 到 int 的显式用户定义类型转换是否有效 这是一种合适的方法吗 或者 最好做类似的事情if foo getX 您可以通