表达式 'ab' == 在C++中是否"ab"正确
Is the expression 'ab' == "ab" true in C++
我的问题听起来可能很愚蠢,但我必须在准备学士学位考试时回答它。
那么,您如何看待C++中的"ab"=="ab"这样的表达方式?这是不正确的还是根本不合法和编译错误?我用谷歌搜索了一下,知道"ab"是 int 类型,而"ab"当然不是......
我必须考虑的不是编译者说了什么,而是语言的正式描述。
它肯定会生成警告,但默认情况下,gcc
编译它。它通常应该是假的。
话虽如此,理论上应该是可能的,当然,这取决于你运行它的平台,将编译时常量"ab"
在内存位置,其地址在数值上等于"ab"的数值,在这种情况下表达式为真(尽管比较当然没有意义)。
在 C 和C++表达式中'ab' == "ab"
都是无效的。它没有任何意义。这两种语言都不允许将任意整数值与指针值进行比较。出于这个原因,它是否"真实"的问题甚至不会出现。为了将其转换为可编译的表达式,您必须将操作数显式转换为可比较的类型。
这里唯一的漏洞是多字符字符常量的值是实现定义的。如果在某些实现中,'ab'
的值恰好为零,则可以将其用作空指针常量。在这种情况下,'ab' == "ab"
变得等效于0 == "ab"
和NULL == "ab"
。这保证是错误的。
它会给你一个警告,但它会建立。它将要做的是将多字节整数"ab"与字符串文本"ab"的地址进行比较。
最重要的是,比较的结果不会反映字母的选择是否相同。
没有关于将整型与指针进行比较的说法。它所说的只是以下内容(在第 5.9 节中):
然后,它详细介绍了比较两个操作数应具有算术、枚举或指针类型,或 键入标准::nullptr_t...
指针的含义,并提到了比较两个整数。因此,我对缺乏规范的解释是"无论编译器编写者决定什么",这要么是错误,要么是警告。
让我们考虑一下简单 C 中的部分,如果你想操作字符串,"c"是一个简单的字符,你必须使用字符数组,结果"ca"不应该按照你期望的方式工作,在 C++ 中这个东西仍然有效。如果要使用字符串,则必须使用不是原始类型的字符串类。它所做的只是一个带有方法和类型 def 的类,因此您可以更轻松地处理数组的字符。结果,即使是 C 样式字符串和字符数组也是不同的东西,因为结果 'ab' == "ab" 不会给出有效的布尔响应。这就像试图将 int 与字符串进行比较。所以,这个昏迷监狱很可能会抛出一个错误。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- CMake-按正确顺序将项目与C运行时对象文件链接
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 用于访问容器<T>数据成员的正确 API
- 如何使用Luacneneneba API正确读取字符串和表参数
- 如何使用用户输入在C++中正确填充2D数组
- node-gyp 在 macOS 上未正确链接库
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 为什么我的for循环不能正确获取argv
- 如何取消对nullptr的屏蔽,返回正确的对象
- AES加密到解密未正确输出
- 使用C++程序合并排序没有得到正确的输出
- 在 c++ 中拥有一组结构的正确方法是什么?
- 使用2个键的cpp-stl::优先级队列排序不正确
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 在'如果'陈述输出如何正确
- 如何正确停止g_main_loop_run
- 我在二维向量中是否正确分配了内存
- 表达式 'ab' == 在C++中是否"ab"正确