为什么 bool 到 string 的隐式转换不会出错?

2023-11-22

我用谷歌搜索并试图在 SO 上找到类似的问题,但没有找到任何有用的东西。所以,在这里发布我的问题。

考虑这个程序:

#include <iostream>
void foo(const std::string &) {}
int main() 
{
    foo(false);
}


[Warning] converting 'false' to pointer type for argument 1 of 'std::basic_string::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]' [-Wconversion-null]
  

为什么 C++ 允许这样做而不需要显式强制转换?我预计会出现编译器错误。由于显示以下异常,程序在运行时异常终止:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

标准对这种类型的隐式转换有何规定?


在 C++11 引入之前nullptr关键字、空指针有点像黑客。任何等于零的整数文字都足以作为空指针常量,并且false符合要求。

所以,你的程序的效果是构建std::string with a char const *的论证NULL。构造函数不支持空指针,因此您会得到未定义的行为。

此问题的解决方案是使用更新的 C++ 方言。经过-std=c++11如有必要,给编译器,或者-std=c++14。那么你应该得到这样的东西:

error: no matching function for call to 'foo'

http://coliru.stacked-crooked.com/a/7f3048229a1d0e5a

EDIT:嗯,GCC 似乎还没有实施此更改。这有点令人惊讶。你可以试试 Clang。

I've filed错误报告。

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

为什么 bool 到 string 的隐式转换不会出错? 的相关文章

  • 是否有可能劫持标准输出

    我正在尝试使用 C 重定向 Windows XP 上已运行进程的标准输出 我知道如果我自己生成进程 我可以做到这一点 但对于这个应用程序 我更喜欢一个 监听器 我可以附加到另一个进程 这在纯 Net 中可能吗 如果不可能 在 Win32 中
  • 自动映射器多对多 stackoverflowException

    我遇到以下映射的堆栈溢出 Mapper CreateMap
  • 将字符串作为 PChar 从 CSharp 传递到 Delphi DLL

    我正在尝试将字符串从 C 传递到 Delphi 构建的 DLL Delphi DLL 需要 PChar 这是Delphi导出 procedure DLL Message Location PChar AIntValue integer st
  • 将公历日期转换为儒略日期,然后再转换回来(随着时间)

    我正在编写一个程序 必须将当前的公历日期和时间转换为儒略日期 然后再转换回公历门 最终我需要添加能够添加年 月 日 小时 分钟和秒的功能 但我需要先解决这部分问题 现在我已经从公历日期转换为儒略日期 所以从逻辑上讲 我觉得我应该能够以某种方
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 在没有 epsilon 的情况下可以将浮点数与 0.0 进行比较吗?

    我知道 要比较两个浮点值 需要使用一些 epsilon 精度 因为它们并不精确 但是 我想知道是否存在边缘情况 我不需要那个 epsilon 特别是 我想知道这样做是否总是安全的 double foo double x if x lt 0
  • C# 无法捕获 SerializationException

    我的程序在加载序列化文件的部分遇到问题 如果文件无法反序列化 我希望很好地失败 但由于某种原因 我的程序将中断而不是进入 catch 子句 这是我的代码 using FileStream fs new FileStream openFile
  • 将 dataGridView 中选定的行作为对象检索

    我有一堂这样的课 public partial class AdressBokPerson public long Session get set public string F rnamn get set public string Ef
  • Linq 合并列表

    我的课 public class Foo public int A get set public List
  • Visual Studio 中列表框的上移、下移按钮[重复]

    这个问题在这里已经有答案了 我正在尝试制作一个上移按钮和一个下移按钮 以移动 Microsoft Visual Studio 2012 中列表框中的选定项目 我已经在 WDF jquery winforms 和其他一些表单中看到了其他示例
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • 在c#中获取没有时间的日期

    我的表上有一列 缺勤日期时间 日期 当我想要获取包含日期的行时 它返回 0 行 这是我的 C 代码 DateTime ClassDate DateTime Parse lblDate Content ToString var Abs dbs
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • 调用异步方法在视图模型的构造函数中加载数据有警告

    我的视图包含一个 ListView 它显示来自互联网的一些数据 我创建一个异步方法来加载数据并在我的视图模型的构造函数中调用该方法 它有一个警告提示我现在使用await关键字 还有其他解决方案可以在构造函数中异步加载数据吗 有几种可以应用的
  • 在 C# 中使用命名空间别名有什么好处? [复制]

    这个问题在这里已经有答案了 使用命名空间别名有什么好处 仅仅是为了简化编码吗 仅当与类发生冲突时我才使用名称空间别名 对我来说 这根本没有简化 我的意见是 如果没有必要 就不要使用
  • 如何检测应用程序正在运行的 .NET 版本?

    我尝试使用Environment Version ToString 确定目标计算机上正在使用什么 NET 框架 但安装了 4 0 版本时 它说我正在使用 NET 2 0 如何检测目标计算机上正在运行的 NET Framework 版本 En
  • 如何将System.Windows dll添加到Visual Studio 2010 Express?

    我正在开发一个小型应用程序C and VS2010 as IDE with NET框架4 我想用CaptureSource类以便从笔记本电脑的网络摄像头捕获视频 为此我需要添加一个命名空间System Windows DependencyO
  • “1个未解决的外部”C++

    我已经检查了所有文件之间的连接以及类和函数定义 但每次我尝试运行我的程序时 它都会阻止我并告诉我它有 1 个未解析的外部 该程序应该打开多个文件 一个 学生 文件和一个 成绩 文件 从中读取数据 然后使用 查询文件 来查找数据 找到查询中要
  • 使用 CodeDOM 将程序集添加到 BuildManager 会导致间歇性错误

    我正在使用 CodeDOM 在运行时创建内存中程序集 如下所示 public Assembly Compile CodeCompileUnit targetUnit string path Path GetDirectoryName new
  • 在windows + opengl中选择图形设备

    我知道如何使用 openGL 打开窗口 使用 Win32 或其他工具包 但是当系统有2块显卡时 如何选择要渲染的图形设备 我的编程语言是 C 我专注于 Windows 但任何示例都将受到欢迎 编辑 也许更好地解释我的问题是个好主意 以便添加

随机推荐

  • 大型 JPEG/PNG 图像序列循环

    我一直在从事有关遥感图像处理和图像序列循环的项目 每个生成的图像 JPEG 或 PNG 格式 大约有 8000 4000 像素 我们的用户通常希望根据感兴趣的区域一次循环图像序列 超过 50 张图像 因此 我必须根据用户的可视化客户端大小从
  • 具有 .Net Core 3.0 不记名令牌授权的 Swagger UI

    我正在尝试将授权标头添加到 SwaggerUI api 测试中 下面是我的 Startup cs public void ConfigureServices IServiceCollection services services AddC
  • PHP 会话默认超时[重复]

    这个问题在这里已经有答案了 PHP 会话默认超时吗 即 如果我没有任何编码 用户在一段时间不活动后最终会 注销 吗 这取决于服务器配置或相关指令会话 gc maxlifetime in php ini 通常 默认值为 24 分钟 1440
  • Kafka 多分区排序

    我知道在 Kafka 中不可能对多个分区进行排序 并且分区排序仅保证组内的单个消费者 对于单个分区 然而 使用 Kafka Streams 0 10 现在可以实现这一目标吗 如果我们使用时间戳功能 以便每个分区中的每条消息都保持顺序 那么在
  • htaccess 缓存不起作用

    我将以下内容输入到 htacces 文件中 以便开始缓存 Web 内容 根据 Google Page Speed 和 Yslow 页面仍未被缓存 模块有错吗 或者是应用程序没有正确显示数据 站点在服务器上的 Apache 2 0 上运行 h
  • .htaccess 重定向不适用于 Angular 4

    我知道很多人问这个问题 但我查看了所有答案 但没有任何效果 我确信问题是我需要创建一个 htaccess 文件并将其添加到我的 dist 中 因为这就是 ISP 控制台指南所说的要做的事情 我正在使用 Angular cli 和构建命令 n
  • 为什么我的比较方法有时会抛出 IllegalArgumentException?

    我遇到这个问题已经有一段时间了 搜索了很多 StackOverflow 问题但无法解决我的问题 我之前也问过类似的问题并得到了使用建议 System setProperty java util Arrays useLegacyMergeSo
  • 计算整数数组中的重复元素

    我有一个整数数组crr array我想计算重复出现的元素 首先 我读取数组的大小并使用从控制台读取的数字对其进行初始化 在数组中new array 我存储重复的元素 数组times存储元素连续出现的次数 然后 我尝试搜索重复序列并以特定格式
  • 文件“xxx.mp4”无法打开,因为您无权查看它

    我使用阿拉莫菲尔方法multipartFormData append URL withName file 将视频上传到服务器 但我收到一条错误消息 multipartEncodingFailed Alamofire AFError Mult
  • 无效的回发或回调参数错误?

    我有两个下拉列表 我使用 javascript 根据另一个下拉列表填充一个 在我的 javascript 代码中 我调用一个网络服务 并根据返回的结果填充另一个下拉列表 问题是 在我成功完成此操作后 开始出现以下错误 回发或回调参数无效 事
  • python中的学生t置信区间

    我有兴趣使用 python 计算学生 t 的置信区间 我在 Mathematica 中使用 StudentTCI 函数 现在需要在 python 中编写相同的函数http reference wolfram com mathematica
  • NOTIFYICONDATA - GUID 问题

    根据 NOTIFYICONDATA 结构的 guidItem 成员的描述http msdn microsoft com en us library bb773352 v vs 85 aspx使用 Windows 系统托盘的程序需要在 Win
  • Sweave 输出中的语法高亮显示

    有没有人设法让颜色语法突出显示在outputSweave 文档 我已经能够通过在中添加框等来自定义输出样式Sweave sty文件如下 DefineVerbatimEnvironment Sinput Verbatim fontseries
  • 如何在一个类中多次使用一个特征?

    以下代码 trait T function foo class C use T T foo as bar use T T foo as baz 产生以下错误 Trait方法bar还没有应用 因为有碰撞 与 C 上的其他特征方法 是否可以在一
  • JQuery 函数的持久化

    我正在尝试为 HTML 设置点击回调 使另一个节点变得可见 一路走来 我惊讶地发现以下两条语句并不等价 title click content toggle title click function content toggle 当最终单击
  • 构建项目时出错:构建播放器时出错,因为脚本在编辑器中存在编译错误

    我有 Tiled2Unity 插件 当我开始在 Unity 中构建游戏版本时 无论是独立版本还是其他版本 我收到以下错误 构建播放器时出错 因为脚本在编辑器中存在编译错误 然后它向我指出了这个课程 using System using Sy
  • 直接从文件系统获取文件校验和,而不是显式计算它

    我猜测典型的文件系统倾向于保留其管理的每个文件的某种校验和 CRC 哈希 因此它可以检测文件损坏 这个猜测正确吗 如果是的话 有没有办法访问它 我主要对 Windows 和 NTFS 感兴趣 但也欢迎对其他平台的评论 语言在这一点上并不重要
  • onCreateLoader 方法中与 AsyncTaskLoader 和 Fragment 一起使用的不兼容类型

    我考虑了一些使用 AsyncTaskLoader 和 Fragment 的示例 https gist github com codeswimmer 884591 我也尝试做同样的事情 但现在我无法修复 onCreateLoader 方法中的
  • Django 1.3 静态文件放置在应用程序目录中

    我正在使用 Django 1 3 应用程序中的静态文件令人困惑 我在做什么 1 设置 STATIC ROOT as path to directory static in my project STATIC URL static 2 在我的
  • 为什么 bool 到 string 的隐式转换不会出错?

    我用谷歌搜索并试图在 SO 上找到类似的问题 但没有找到任何有用的东西 所以 在这里发布我的问题 考虑这个程序 include