隐式转换没有警告

2023-12-15

// g++ sizeofint.cpp --std=c++11 -Wconversion -Wall -Wextra -Werror -pedantic-errors
#include <iostream>
#include <utility>

int main(int argc, char **argv) {
    (void)argc;
    (void)argv;
    int a = 0x12345678;
    std::cout << sizeof(int) << "..." << sizeof(uint16_t) << std::endl;
    std::pair<uint16_t, uint16_t> p{a,a}; // !!!! no warning or error on conversion !!!!
    std::cout << p.first << ":" << p.second << std::endl;
    uint16_t b = a; // !!!! correct behavior: -Wconversion triggers warning, which -Werror turns to an error
    std::cout << b << std::endl;
    return 0;
}

通过上面的代码,您可以清楚地看到从int to uint16_t构建时p。然而,从版本 4.9.1 开始,g++ 在使用开头注释中提供的参数时不会抱怨任何转换。

后来,g++ 确实抱怨构造时隐式转换为 uint16_tb.

我正在努力确保p的构造至少会导致警告(但最好是错误)。

有什么想法吗?是否有一个我不知道的标志可以触发正确的行为?


如果您的代码使用了constexpr pair(const uint16_t& x, const uint16_t& y);的构造函数std::pair<uint16_t, uint16_t>,您会收到警告和/或错误。你甚至不需要-Wconversion为此 - 缩小大括号内的转换会导致程序格式错误。

但相反,选择了重载分辨率std::pair's template<class U, class V> constexpr pair(U&& x, V&& y);构造函数,这是一个更好的匹配。结果,转换不是在您编写的代码内发生,而是在该构造函数内发生。由于该构造函数是在系统标头中定义的(请参阅GCC 的文档,帽子提示@quantdev),该警告被 GCC 抑制。

虽然你可以使用-Wsystem-headers要启用来自系统标头的警告,该选项将产生许多不相关的警告所以与人的互动非常糟糕-Werror.

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

隐式转换没有警告 的相关文章

  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 使用 MySQLi 的 real_escape_string 作为静态函数

    我想知道是否可以转义字符串 使用 real escape string 而无需先创建对象实例来应用该函数 即 我们可以这样做 database new mysqli DB HOST DB USER DB PASS DB NAME datab
  • 限制在 PDF 页面边界内移动/拖动 pdf 注释

    我正在使用 PDF 套件库在 PDF 视图上加载一份 PDF 我在 pdf 视图上添加了一个自定义视图 与 PDF 注释相同 并且允许用户使用 UIPanGestureRecognizer 在 pdf 视图上 在 pdf 视图 容器视图内
  • 如何在MSVC中有效地将两个__m128d转换为一个__m128i?

    转换然后移位然后按位或是从两个转换的唯一方法 m128d到一个单一的 m128i 这对于 x64 构建中的 Xcode 来说是完全可以接受的 m128d v2dHi m128d v2dLo m128i v4i mm set epi64 mm
  • 如何杀死 C# 线程?

    我有一个线程在我们的 旧 SQL 服务器上查找数据 当数据进入时 我将信息发布到模式对话框中 在所有这些处理正在进行时 用户不能也不应该做任何其他事情 模式对话框只是让他们看到我正在做某事并防止他们同时运行另一个查询 有时 很少 当代码调用
  • 如何在 vi 搜索和替换中包含正斜杠

    我有一个包含字符串的文件usrbin 我想寻找usrbin并将其替换为 usr bin I tried s usrbin usr bin g 但它显示错误E488 Trailing characters 如何在搜索和替换中包含正斜杠 这里有
  • Enterprise Library 6 验证配置文件

    我正在尝试学习 EnterpriseLibraryValidatoin 当我配置 TypeValidation 通过配置文件验证类时 它不会拾取 但是当我添加数据注释时它会正确验证 我不知道我是否遗漏了一些东西 请提供任何帮助 验证配置文件
  • JS:仅过滤非空和字符串值类型的数组

    我正在尝试过滤这样的数组 array filter e gt return e 有了这个我想过滤所有空字符串 包括undefined and null 不幸的是 我的数组有一些不应该存在的数组 因此 我还需要仅检查字符串值并删除所有其他值
  • 通俗地说,Ruby 自我?

    Ruby self 什么时候引用 Object 什么时候 self 引用 Ruby 类 带有示例的解释会很棒 我不明白这个问题 类本身就是对象 假设我有一堂课Person 这实际上是一个实例Class 所以你可以让 self 引用 Arti
  • 在 Javascript 中将数字连接为字符串

    myCoolObject a 0 b 12 c 24 我想串联a b and c使它们看起来像一个唯一的字符串 a b c 或示例中的 0 12 24 a b and c总是代表数字 将它们中的每一个从 int 转换为 string 需要大
  • 未找到整数 parseInt 方法

    我正在尝试在这段代码中测试一个简单的方法 您在其中使用接收参数的方法 正在发生的问题是Integer解析 int 方法 命令提示符给出的错误是 java 24 error cannot find symbol cholo Integer p
  • 清除 QGraphicsScene 中的小部件:崩溃

    我有一个 QGraphicsScene 里面有一个 QPushButton 清除这个场景将使我的应用程序崩溃 有没有正确的方法来使用 QWidget 清除场景 单击按钮时以下代码会崩溃 include
  • python:multiprocessing.Pipe 和重定向标准输出

    我在用multiprocessing包生成第二个进程 我想将 stdout 和 stderr 重定向到第一个进程 我在用multiprocessing Pipe object dup2 output pipe fileno 1 Where
  • VS 2010 Ultimate:将 ProteusDebugEngine 调试器附加到进程失败

    当将 C NET 4 项目加载到我的主机 Win 7 Ultimate 64 位 上的 VS 2010 Ultimate 中时 我收到错误消息 Attaching the ProteusDebugEngine debugger to pro
  • 使用“.gitattributes”文件修复 Git 存储库中的行结尾

    需要修复什么 我有一个包含单个 md文件 其中包含我正在写的一篇文章 我在几台不同的计算机上编辑该文件 其中一台运行 Linux 另一台运行 Windows 看着一个git diff现在在 Windows 中我做了一些更改 我可以看到我的文
  • @RequestMapping 未正确映射

    我正在尝试设置一个控制器 但不幸的是无法查看输出 一切都正确渲染 当我去http localhost 8080 CMT content edit我收到 404 页面 从 Netbeans 运行我的应用程序会转到http localhost
  • 多对多 Ajax 表单(Symfony2 表单)

    我在 mongodb 中玩家和锦标赛之间存在多对多关系 我希望能够一次将许多玩家添加到锦标赛中 如果没有 ajax 这很简单 但我们有一个包含数千名玩家的数据库 因此表单选择变得巨大 我们想为此使用 ajax 是否可以创建一个小部件 带有j
  • 创建安装程序:从注册表项读取安装路径(例如 wix/installshield/nsis)

    我想创建我的程序的安装程序 但由于安装相当复杂 我需要比 installshield 限量版更高级的东西 我必须从当前的安装程序中运行另一个安装程序 用户是否按 取消 或安装该程序并不重要 我只需要运行它即可 我必须在用户计算机上安装一个包
  • XMl 解析中的空指针异常

    我需要解析 Xml 文档并将值存储在文本文件中 当我解析普通数据 如果所有标签都有数据 时 它工作正常 但如果任何标签没有数据 那么它会抛出我需要的 空指针异常 要做的 为了避免空指针异常 请建议我使用示例代码 示例 XML
  • 无法使用 Laravel SMTP 驱动程序将邮件发送到 gmail 帐户并且没有收到错误

    我正在 Localhost 中构建 Laravel 5 8 应用程序 我这样配置我的 env 文件 MAIL DRIVER smtp MAIL HOST mail mydomain com MAIL PORT 465 took from m
  • 隐式转换没有警告

    g sizeofint cpp std c 11 Wconversion Wall Wextra Werror pedantic errors include