C++ 比较两个字符串文字

2024-02-07

将一个字符串文字与另一个字符串文字进行比较时==运算符(或!=),结果是否明确定义?

例如,以下内容是否保证成立?

assert("a" == "a");
assert("a" != "b");

请不要说“使用 std::string”之类的东西。我只是想知道这个具体案例。


"a" == "a"

这个表达式可能会产生true or false;没有任何保证。他们俩"a"字符串文字可能占用相同的存储空间,也可能存在于内存中的两个不同位置。

我认为 C++ 标准中最接近的语言是:“所有字符串文字是否不同(即存储在非重叠对象中)是实现定义的”(C++11 §2.14.5/12)。没有其他要求或限制,因此结果未指定。

"a" != "b"

这个表达式必须产生false因为这两个字符串文字不可能在内存中占据相同的位置:"a"[0] != "b"[0].


当您以这种方式比较字符串文字时,您实际上是在比较指针与数组中的初始元素。

因为我们正在比较指针,所以关系比较(<, >, <=, and >=)比相等比较(== and !=)因为使用关系比较只能执行一组有限的指针比较。仅当两个指针都是指向同一数组的指针或指向同一对象的指针时,才可以进行关系比较。

如果两个"a"字符串文字在内存中占据相同的位置,然后"a" < "a"将是明确定义的并且会产生false,因为两个指针都指向初始元素('a')同一个数组。

然而,如果两个"a"字符串文字占用不同的内存中的位置,结果"a" < "a"未定义,因为被比较的两个指针指向完全​​不相关的对象。

Because "a" and "b"永远不能占据内存中的同一位置,"a" < "b"总是有未定义的行为。其他关系比较运算符也是如此。

如果您出于某种原因想要比较两个字符串文字并获得明确定义的结果,则可以使用std::less比较器,它对所有指针提供严格弱排序。还有std::greater, std::greater_equal, and std::less_equal比较者。鉴于具有相同内容的字符串文字可能不相等,我不知道为什么有人会想要这样做,但你可以。

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

C++ 比较两个字符串文字 的相关文章

随机推荐

  • Pandas 导入 FRED 数据(pandas.io.data 或 pandas_datareader)

    这里非常简单的问题 我找不到阅读文档的答案 下面是摘录 import pandas datareader data as web pandas 0 19 x and later import datetime start datetime
  • 使用自定义 CSS 覆盖 Material2 样式

    我在 Angular 中有 Datepicker 元素 它是 Material Design 的标准组件 当我尝试为此元素设置自己的样式时 它不适用于属性 important 如何修复它 以及如何更改默认组件的样式 代码示例 mat dat
  • Esri Angular 7 代理项目截图

    我的团队目前正在开发一个具有 Angular 7 前端和 net core 2 1 后端的 Web 应用程序 我需要做的任务之一是抓取屏幕截图并将其附加到电子邮件中 Web 应用程序有一个 esri 地图 为了捕获屏幕截图 我使用 html
  • 插入后获取mysql的最后一个插入id

    我有一个这样的查询 INSERT INTO table1 field1 field2 VALUES value1 value2 ON DUPLICATE KEY UPDATE field1 value1 然后我想获取最后一个插入ID 如果它
  • LLVM IR 指令和源代码行之间的映射

    如果使用 llvm gcc 或 Dragonegg 我如何存储 LLVM IR 指令和源代码行之间的映射 内部 LLVM IR 调试信息应用于此目的 看http llvm org docs SourceLevelDebugging html
  • JAXB 不接受 CustomEscapeHandler

    我正在开发一个执行大量 XML 操作的应用程序 因此我尝试让 JAXB 在其中工作 我有以下 CustomEscapeHandler 类 导入 com sun xml bind marshaller CharacterEscapeHandl
  • 续集,语句(where)中的语句(where)

    我正在尝试花 2 个小时来解决一个不是一个的小问题 我正在使用生成的 yeoman Angular fullstack 应用程序 我想用sequelize编写这段代码 SELECT FROM demand WHERE city id NOT
  • MockService 仍然导致错误:无法读取未定义的属性“订阅”

    我是 Angular 测试的新手 所以 我正在关注这个多元视野课程 https app pluralsight com library courses unit testing angular table of contents 我不断收到
  • 如何在 Django 中动态隐藏表单字段?

    我正在 Django 中制作个人资料表单 有很多可选的额外配置文件字段 但我只想一次显示两个 如何隐藏或删除不想动态显示的字段 这是我到目前为止所拥有的 class UserProfileForm forms ModelForm extra
  • 证书结构

    大多数签名证书占用空间都是 20 字节长 Windows 证书管理器中的 占用空间 字段 这怎么可能是发证 认证 机构签署的值呢 具体来说 证书的签名应该是由私钥签名的证书字段的散列值 因此至少具有颁发者私钥的 RSA 模数长度 在 RSA
  • 构造函数作为函数 try 块 - 异常中止程序

    我不确定这是编译器的问题还是我做错了什么 我正在使用 Visual Studio 2013 编译器 我有一个类 我需要在构造函数初始值设定项列表中获取大量资源 其中大部分资源可能会引发异常 我将成员初始值设定项列表包装在函数 try 块中
  • Jquery DataTable中的滚动问题

    我不确定我是否在重复这个问题 如果是的话 指导到正确的地方 我正在使用数据表并尝试实现水平滚动并找到此链接 http www datatables net examples basic init scroll x html http www
  • onnx图,如何获取输出维度?

    如何获取onnx神经网络输出层的维度 我可以得到 onnx 图 但没有输出维度 onnx tensorrt third party onnx onnx tools net drawer py input weights tiny 3l v5
  • 在弹出窗口中显示要删除的项目

    我正在使用 Odoo 10e 我想要一个简单的功能 每当我想从列表视图或仅从特定列表视图中删除一个或多个项目时 我想显示所有选择删除的项目 以在弹出窗口中显示其名称 以便用户可以快速查看他要删除的内容 我知道用户可以在列表视图中查看详细信息
  • 分割时间频率到行

    我试图将具有开始时间 结束时间 频率和持续时间的时间频率拆分为单独的行 以下是一些示例数据 Name Start Time End Time Frequency Hours Duration Mins A 08 00 00 18 00 00
  • 以编程方式更改列表视图项中的文本颜色

    我想做这样的事情 textLabel inCell TextColor Color Black 但 Visual Studio 显示错误 textLabel inCell 在当前上下文中不存在 如何以编程方式更改 listView 项的文本
  • 使用 .NET 控制台应用程序通过芯片选择写入 HID

    您好 我正在编写一个简单的控制台应用程序 需要将字节写入MCP2210 USB to SPI Master我发现这个图书馆here https www zer7 com software hidsharp 似乎在连接设备和读取元数据方面做得
  • 如何在没有应用程序上下文的情况下使用 spring-security 过滤器?

    我想直接从 java 代码使用 spring security web filters 而不需要 spring 应用程序上下文 或 spring 容器 这可能吗 我可以直接调用不同的 spring 生命周期方法吗 如果可以 是否有一个如何执
  • 如何在 Swift 中声明 volatile 变量

    我想从 Objective C 代码转换为 Swift 如下所示 int sum 0 x 1 for int i 0 i lt 100 i sum x x 可以从其他线程访问 因此 x 被声明为 volatile 变量 volatile i
  • C++ 比较两个字符串文字

    将一个字符串文字与另一个字符串文字进行比较时 运算符 或 结果是否明确定义 例如 以下内容是否保证成立 assert a a assert a b 请不要说 使用 std string 之类的东西 我只是想知道这个具体案例 a a 这个表达