为什么我必须在 POD 类型中重载operator==?

2024-05-02

我有一个定义如下的结构:

struct Vec3 {
float x, y, z;
}

当我尝试使用时std::unique on a std::vector<Vec3>,我遇到了这个错误:

描述 资源路径 位置类型 “_”中的“运算符==”不匹配first._gnu_cxx::__normal_iterator<_iterator _container>::operator* 与 _Iterator = Vec3*, _Container = std::vector > == _next._gnu_cxx::__normal_iterator<_iterator _container>::operator* with _Iterator = Vec3*, _Container = std::vector >' ModelConverter 第 4351 行,外部位置:/usr/include/c++/4.4.6/bits/stl_algo.h C/C++问题

我理解编译器在不等式运算符和其他运算符中naievite的必要性(在这种情况下,*几乎肯定不是我的意思),但这是一个政策问题,还是有我不知道的技术原因吗?有一个默认的赋值运算符,那么为什么没有默认的相等运算符呢?


没有技术原因。迂腐地,您可能会说这是因为 C 不允许您比较两个结构==,这是一个很好的理由;当您转向 C++ 时,行为切换并不明显。 (大概,C 不支持这一点的原因是字段明智的比较可能适用于some结构,但绝对不是全部。)

仅从 C++ 的角度来看,如果您有一个私有字段怎么办?默认的==从技术上讲,暴露了该领域(间接,但仍然)。那么编译器只会生成一个operator==如果没有私有或受保护的数据成员?

此外,有些类没有合理的相等性定义(空类、不对状态建模但缓存它的类等),或者默认的相等性检查可能非常令人困惑(包装指针的类)。

然后是继承。决定做什么operator==在继承比较复杂的情况下,编译器很容易做出错误的决定。 (例如,如果这是 C++ 所做的,我们可能会问为什么==当您测试两个对象之间的相等性时总是会成功,这两个对象都是抽象基类的后代并与其引用一起使用。)

基本上,这是一个棘手的问题,即使考虑到您可以覆盖编译器决定的任何内容,编译器也不介入它会更安全。

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

为什么我必须在 POD 类型中重载operator==? 的相关文章

  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 为什么 BOOST_FOREACH 不完全等同于手工编码的?

    From 增强文档 http www boost org doc libs 1 48 0 doc html foreach html foreach introduction what is literal boost foreach li
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐

  • 当文件太大时,Flask 会重置连接而不是返回 413

    When MAX CONTENT LENGTH已定义 Flask 应该返回 413 但在我的例子中 它会重置连接并显示以下错误 Error 101 net ERR CONNECTION RESET The connection was re
  • 如何在 PHP 中解析和处理 HTML/XML?

    如何解析 HTML XML 并从中提取信息 Answer recommended by PHP collectives php Collective 原生 XML 扩展 我更喜欢使用其中之一原生 XML 扩展 https php net m
  • Bootstrap 如何从一个类切换到下一个类?

    我试图理解Bootstrap 3的反应能力 我明白在css如果一个元素有 2 个类 那么第二个类将覆盖第一个类 但是 当您使用以下命令创建响应式设计时Bootstrap 您的元素将如下所示 div class col sm 1 col md
  • 将 JSON 对象转换为 protobuf IStruct

    我正在使用Nodejs 的 Dialogflow API https cloud google com nodejs docs reference dialogflow 0 8 x google cloud dialogflow v2 这个
  • 双向消息传递的节俭

    我很好奇 Thrift 是否适合我的用例 我正在制作另一个消息系统 其中有客户端和服务器 但客户端和服务器都向对方发起请求消息 并且并非所有消息都可能是请求 而只是通知 回到 10 年前 我使用手动二进制编解码器完成了这项工作 回到 5 年
  • 谷歌 Android 地图 v2 MetersToEquatorPixel

    我目前的任务是将 Google Android 地图 v1 应用程序转换为 Google Android 地图 V2 应用程序 这个过程并不愉快 感谢谷歌 我的问题是 在之前的应用程序中 他们使用了 Google Android Maps
  • 有没有办法覆盖 iOS 13 上下文菜单的(深色/浅色)用户界面风格?

    我的应用程序支持 iOS 13 深色模式 并为用户提供匹配系统外观或强制应用程序始终使用深色模式或浅色模式的选项 无论系统设置如何 该应用程序还允许在用户按下时显示上下文菜单UILabel 但是 当使用以下方式呈现上下文菜单时UIConte
  • DOJO xhrGet如何使用返回的json对象?

    如何在 get 本身之外访问从 xhrGet 返回的数据 Firebug 显示 json 对象有一个名为 results 的数组 该数组存储响应中的 json 对象 但当我尝试访问它时它为 null 那么 如何访问最后一个代码行接收到的数据
  • Java ArrayList 复制

    我有一个ArrayList l1大小为 10 我指定l1到新列表引用类型l2 Will l1 and l2指向相同ArrayList目的 或者是副本ArrayList对象分配给l2 当使用l2参考 如果我更新列表对象 它会反映l1参考类型也
  • 从 Jinja 渲染模板中删除不必要的空白

    我在用着curl观看我的网络应用程序的输出 当 Flask 和 Jinja 渲染模板时 输出中存在大量不必要的空白 它似乎是通过渲染 Flask WTF 和 Flask Bootstrap 的各种组件来添加的 我可以使用剥离这个sed 但是
  • protoc 在哪里以及如何安装它?

    我想使用protoc生成java文件的命令 我一直按照 github README 中的说明进行操作https github com protocolbuffers protobuf https github com protocolbuf
  • 如何检查目录或其任何子目录中是否存在特定文件

    在 C 中 如何检查目录或其任何子目录中是否存在特定文件 系统 IO 文件 存在似乎只接受单个参数 没有搜索子目录的重载 我可以用 LINQ 来做到这一点系统 IO 目录 GetFiles使用搜索选项 AllDirectories超载 但这
  • 按键时从文本区域获取最后一行

    我有一个文本区域字段 在每次按键时 我想将文本区域中的最后一行推送到数组中 目前 我正在每次按键时构建数组以获取文本区域中的最后一行 有没有办法优化这个 意思是 无需构造数组即可获取文本区域中的最后一行 jQuery mytextarea
  • 为 python 游戏添加再次玩选项

    我正在使用 python 为我的编程课制作一个游戏 我不知道当玩家输了或退出游戏时如何再次给他们选择 我正在使用Python 2 7 这是我的游戏的代码 import pygame sys time random from pygame l
  • Eclipse 中的一个文件中可以有多个类吗?

    Eclipse 中的一个 java 文件中是否可以包含多个类 或者我真的必须将每个文件放在不同的文件中吗 这只是 Eclipse 强加的东西 还是 Java 编译器有一些反对将所有内容放在同一个文件中的东西 根据 Java 规范 每个文件只
  • 宏、Clojure 与 Common Lisp

    我和我的一些朋友正在开发一个新平台 我们想用 lisp 构建它 主要吸引力是宏 我们都使用 Common Lisp 但我想探索 Clojure 的选择 当我提出这一点时 其中一位说宏观体系 较弱 我想知道这是否属实 以及在哪些领域 就您可以
  • 使用可编码的值,有时是 Int,有时是 String

    我有一个 API 有时会返回特定的键值 在本例中id 在 JSON 中作为 Int 有时它会以 String 的形式返回相同的键值 如何使用 codable 来解析该 JSON struct GeneralProduct Codable v
  • 在 Quickbooks v3 api 中断开应用程序连接

    我正在研究 Quickbooks v3 api 集成 我已经完成了所有集成 但陷入了 Quickbooks 从应用程序断开连接的状态 我正在使用以下代码片段来断开与 Quickbooks 的连接 final IAPlatformClient
  • 如何确保用户只提交英文文本

    我正在构建一个涉及自然语言处理的项目 由于nlp模块目前只处理英文文本 所以我必须确保用户提交的内容 不长 只有几个单词 是英文的 是否有既定的方法来实现这一目标 首选 Python 或 Javascript 方式 如果内容足够长我会推荐一
  • 为什么我必须在 POD 类型中重载operator==?

    我有一个定义如下的结构 struct Vec3 float x y z 当我尝试使用时std unique on a std vector