默认参数位于参数列表中间?

2024-03-02

我在我们的代码中看到一个函数声明,如下所示

void error(char const *msg, bool showKind = true, bool exit);

我首先认为这是一个错误,因为函数中间不能有默认参数,但编译器接受了这个声明。有没有人见过这个?我正在使用GCC4.5。这是 GCC 扩展吗?

奇怪的是,如果我把它放在一个单独的文件中并尝试编译,GCC 会拒绝它。我已经仔细检查了所有内容,包括使用的编译器选项。


如果在函数的第一个声明中,最后一个参数具有默认值,则该代码将起作用,如下所示:

//declaration
void error(char const *msg, bool showKind, bool exit = false);

进而在同一范围内您可以在后面的声明中为其他参数(从右侧)提供默认值,如下所示:

void error(char const *msg, bool showKind = true, bool exit); //okay

//void error(char const *msg = 0 , bool showKind, bool exit); // error

可以称为:

error("some error messsage");
error("some error messsage", false);
error("some error messsage", false, true);

在线演示:http://ideone.com/aFpUn http://ideone.com/aFpUn

请注意,如果您为第一个参数(从左开始)提供默认值,而不为第二个参数提供默认值,则它将无法编译(如预期):http://ideone.com/5hj46 http://ideone.com/5hj46


§8.3.6/4 说,

对于非模板函数,默认 参数可以稍后添加 同一函数中的函数声明 范围。

标准本身的示例:

void f(int, int);
void f(int, int = 7);

第二个声明添加了默认值!

另请参阅§8.3.6/6。

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

默认参数位于参数列表中间? 的相关文章

  • “RouteCollection”不包含“MapMvcAttributeRoutes”的定义

    我尝试使用基于属性的路由 但是当我尝试以下代码片段来激活基于属性的路由时 我收到以下错误消息 RouteCollection 不包含定义 MapMvcAttributeRoutes 这是我的代码 public class RouteConf
  • 从 C 中的 char* 获取单个字符

    有没有办法在 C 中逐字符遍历或从 char 中提取单个字符 考虑以下代码 现在获得单个角色的最佳方式是什么 建议我一种不使用任何字符串函数的方法 char a STRING 其他方式 char i for i a i i i points
  • binary_log_types.h:没有这样的文件或目录

    我正在编译一个小型 mysql C 项目并且 遇到以下错误 C Program Files x86 MySQL MySQL Server 5 7 include mysql com h 22 30 fatal error binary lo
  • 动态选择和更新 LINQ 结果集中的列值

    我有一个场景 其中存在 LINQ 结果集 我使用了以下查询 var stockDetails from d in db BloodBanks where d bbUserName Session username ToString sele
  • 如何通知父线程所有子线程都已终止?

    我有一个控制台应用程序正在移植到 WPF 该应用程序有 3 个工作线程 在将一些输出结果打印到屏幕上之前 这些线程都连接到主线程 我的理解是 如果我尝试在 WPF 应用程序中执行相同的操作 GUI 将被阻止并且不会响应用户 那么如何通知父线
  • 当 f & g 修改同一个全局变量时,表达式 f() > g() 的值是否未定义或未指定?

    UPDATE 由用户标记ecatmur 它是重复的在 C99 中 f g 是未定义还是只是未指定 https stackoverflow com questions 3951017 in c99 is fg undefined or mer
  • 比较 LINQ to SQL 中的两个日期

    我有一个数据库 其中有一个名为会议的表 会议日期使用以下格式存储在此表中 May 2nd 2011 例如 格式为5 2 2011 我的要求是获取两个日期 例如 2011 年 4 月 25 日和 2011 年 5 月 2 日 之间的会议 并编
  • 我的 WPF 应用程序未触发 MainWindow_Loaded

    我目前正在关注Pluralsight C Fundamentals Part 1并在Classes and Objects视频部分指导我在 Visual Studio 中创建一个新的 WPF 应用程序并填写代码 这导致以下结果 namesp
  • 多维数组和指向指针的指针

    创建多维数组时char a 10 10 根据我的书 它说你必须使用类似于char a 10 将数组传递给函数 为什么必须这样指定长度 您不是只是将双指针传递给 with 并且该双指针不是已经指向分配的内存吗 那么为什么参数不能是char a
  • 试图使用加密来混淆我的项目打破了它

    我试图尝试不同的混淆选项 为了做到这一点 我首先尝试了加密货币 以下是我遵循的步骤 打开加密向导并选择一些选项 选择我的解决方案文件 完成向导后 我看到有些 Dll 被很好地混淆了 但我的项目现在无法构建 我注意到的两件事是 我的文件夹中有
  • ASP.NET中如何访问除wwwroot以外的位置

    我可以使用访问服务器的物理位置Server MapPath 这给了我内部的物理路径wwwroot文件夹 我想将一些数据保存到同一服务器的另一个驱动器中D 驾驶 我想我无法获取以下位置的物理位置D 驾驶使用Server MapPath因为它位
  • 如何使用 ProtoGen 从 proto 文件生成结构

    我们一直在使用 protobuf net ProtoGen 从 proto 文件生成 C cs 文件 我们希望代替类来生成结构 例如 DataContract public struct Entity1 ProtoMember 1 publ
  • 从视图模型调用方法的命令

    好吧 我倾向于避免使用命令 因为它们总是让我感到困惑 但我正在进行一个新项目 并且正在尝试正确构建它 并且在我看来没有任何代码隐藏 基本上我现在想做的就是连接一个按钮来触发一个命令 在我的视图模型上执行一些操作 但不知何故 如此简单的事情仍
  • C++ 联合数组和变量?

    在C 中没有办法做这样的事情吗 union Scalar x y Scalar v 2 Where x v 0 and y v 1 既然您使用的是 C 而不是 C 并且它们具有相同的类型 为什么不直接将 x 设为对 v 0 的引用 将 y
  • 如何组合||条件语句中的运算符[重复]

    这个问题在这里已经有答案了 代替 if foo 1 foo 5 foo 9 我喜欢将它们组合起来 类似于以下内容 这不起作用 if foo 1 5 9 那可能吗 不幸的是不是 你最好的选择是创建一个扩展方法 public static bo
  • 返回 ICollection 而不是 List 的真正优势是什么? [复制]

    这个问题在这里已经有答案了 我读过几篇博客文章 提到对于公共 API 我们应该始终返回 ICollection 或 IEnumerable 而不是 List 返回 ICollection 而不是 List 的真正优势是什么 Thanks 复
  • 在Framework 4.6项目中使用.net core DLL

    我已经在 net core 2 0 中构建了一个 DLL 现在我想在使用 net 4 6 1 框架的 WinForms 项目中使用它 我可以引用该 dll 但收到 System IO FileLoadException 表示找不到 Syst
  • 是否可以编写一个在另一个 Windows 应用程序中选择文本时收到通知的 Windows 应用程序?

    我很好奇是否可以编写一个程序来监视我的文本选择 一种可能的用途是编写一个与编辑器 IDE 无关的代码格式化程序 应用程序 服务 P 启动并以某种方式挂接到窗口中 以便在任何窗口中选择文本时收到通知 启动其他一些应用程序 A 用户选择 A 中
  • 替换全局热键

    我有一个位于托盘中的应用程序 我想定义多个热键来触发我的程序中的事件 我从 AaronLS 在这个问题中的出色回答中找到了灵感 使用C 设置全局热键 https stackoverflow com a 27309185 3064934 如果
  • 如何使用 Ioc Unity 注入依赖属性

    我有以下课程 public interface IServiceA string MethodA1 public interface IServiceB string MethodB1 public class ServiceA IServ

随机推荐

  • Google AMP 脚本与 jquery window.scroll 冲突

    我正在尝试遵循 Google 建议的 AMP 指南 ampproject org https www ampproject org 但是一旦我添加了他们的 js 脚本 jQuery 滚动就停止工作 有谁知道为什么以及如何解决它 AMP HT
  • 如何在 VS 单元测试中包含示例数据文件?

    我想要针对示例 XML 文件运行单元测试 我应该如何将这些文件暴露给单元测试 我尝试过使用内容构建操作 但我无权访问应用程序上下文 因此 GetContentStream 已退出 我知道我可以将 DataContext 用于 SQL 数据库
  • Setter 目标名称无法识别

    我是 WPF 的初学者 我尝试使用 DataTrigger 编写 WPF 部分 这里需要逻辑 If the variable iBottleCount gt 10 then make the background of a label gr
  • 我何时以及为什么应该清理 XCode 中的构建

    每隔一段时间 解决 XCode 中严重问题的方法就是点击 Product Clean 这似乎会清除一些缓存 问题就会消失 但它实际上在做什么 更重要的是 我应该什么时候这样做 在处理核心数据时似乎更频繁地需要它 但我并没有真正跟踪它 作为一
  • 基于比较的排序技术的局限性

    大多数需要对数据进行排序的场景都会选择比较排序 合并排序 快速排序 插入排序和其他比较排序等技术可以处理不同的数据类型 并且效率的下限为 O nLog n 我的问题是 基于比较的排序技术有任何限制吗 有哪些场景会使用非比较排序技术 chee
  • 将两个现有地块合并为一个地块

    我还没有真正尝试过任何方法来做到这一点 但我想知道是否有一种方法可以将已经存在的两个图合并到一个图中 任何投入将不胜感激 这是一个完整的最小工作示例 它介绍了从多个图中提取和组合数据所需的所有步骤 import numpy as np im
  • Javax Websocket 由于非法 UTF-8 序列而关闭

    我正在使用 javax websocket API 用 Ja va 编写一个 Websocket 客户端 并且org glassfish tyrus作为实施 通常一切正常 但有时 当我收到非常大的字符串时 连接会以神秘的 非法 UTF 8
  • 如何向 Code::Blocks 编译器添加 C++11 支持?

    我正在编写一些代码 需要 C 11 支持我的 Code Blocks 12 11 我使用的是 MingW 附带的默认 GNU GCC 编译器 我有什么办法可以做到这一点吗 Go to Toolbar gt Settings gt Compi
  • 在代码隐藏中为 xaml 元素设置多重绑定

    我有以下有效的 XAML 代码 它基本上绑定了几个属性来计算用户控件的最终位置
  • 添加自定义 Video.js 控制栏按钮

    我已经在 video js 上工作了大约一天 所以对于这个东西我是一个真正的新手 今天我只想添加一个在两个视频之间切换的按钮 我用 jQuery 快速简单地完成了它 但我宁愿用 javascript 来更好地理解 video js 的整体
  • Linux vi 箭头键在插入模式下损坏

    我的箭头键在家里的插入模式下的 vi 中不起作用 它们只是插入一个换行符和一个大写字母 例如 A 有办法解决这个问题吗 我猜你正在使用 vim 因为它被标记为 Linux 尝试 set nocompatible 您可能想通过添加此命令来配置
  • 错误:原因:com.android.sdklib.repository.FullRevision

    我想尝试从 AS 2 0 即时运行 为此 我必须将构建插件更新为 2 0 0 alpha6 但执行此操作时 我无法再对项目进行 gradle 同步 因为我得到 Gradle myProject 项目刷新失败 错误 原因 com androi
  • Python:未检测到已安装的 selenium 包

    我正在使用Anaconda http continuum io downloadspython 发行版并想使用selenium http selenium googlecode com svn trunk docs api py index
  • 如何在Python中获取线程id?

    我有一个多线程Python程序和一个实用函数 writeLog message 写出时间戳 后跟消息 不幸的是 生成的日志文件没有给出哪个线程正在生成哪个消息的指示 我想writeLog 能够在消息中添加一些内容来识别哪个线程正在调用它 显
  • 如何在 RSAParameters 上设置用于 RSACryptoServiceProvider 的公钥和私钥?

    我在网上阅读了一些教程 并生成了公钥和私钥 但是如何将它们设置为在 C 中使用 这是我所拥有的 string publicKey string privateKey UnicodeEncoding ByteConverter new Uni
  • 从 BitmapSource 中删除 Alpha

    我使用 BitBlt 和 CreateBitmapSourceFromHBitmap 将窗口捕获为 BitmapSource 可以将其显示在 WPF 应用程序中的 Image 元素上 但由于某种原因 它捕获的大部分应用程序都是透明的 这是正
  • htaccess RewriteRule *.php 到 /*/

    我只是找不到满足我需要的正确解决方案 所以我希望有人能够在这里帮助我 我现在有包含此文件的网站 admin images js about php index php news php questions php 所以我现在的网址是 www
  • Route 53 资源记录集的多个 IP 地址

    我正在研究aws route53 当我创建资源记录集时 我可以将多个IP地址添加到记录集的值中 这里多个IP地址的目的是什么 例如 我的域将路由到服务器 1 和服务器 2 我尝试停止服务器 1 并访问我的域 但它没有路由到服务器 2 这里有
  • MySQL:对空值进行平均

    有没有一种简单的方法可以排除空值对平均值的影响 它们似乎算作 0 这不是我想要的 我只是不想考虑它们的平均值 但问题是 我不能将它们从结果集中删除 因为该记录包含我确实需要的数据 Update example select avg col1
  • 默认参数位于参数列表中间?

    我在我们的代码中看到一个函数声明 如下所示 void error char const msg bool showKind true bool exit 我首先认为这是一个错误 因为函数中间不能有默认参数 但编译器接受了这个声明 有没有人见