如何在 C++ 中声明指向常量的指针?

2024-02-24

我正在尝试编写一个函数来解析命令行参数。这是函数声明:

void parse(int, char const **);

以防万一,我也尝试过(const char)**, const char **, and cchar **用一个typedef const char cchar。然而,如果我通过一个,所有这些(正如预期的,因为它们应该都是相同的)都会导致错误char **进入函数,如:

void main(int argc, char **argv) {
    parse(argc, argv);

我从 GNU 编译器得到的错误是error: invalid conversion from 'char**' to 'const char**'来自 Clang 的一个是candidate function not viable: no known conversion from 'char **' to 'const char **' for 2nd argument.

我见过这样的解决方案,建议将指针声明为指向 char 的 const 指针(const char * const *),但我不希望任何一个指针都是 const,因为我希望能够修改该指针,以便我可以使用迭代参数for(; **argv; ++*argv)。如何声明“指向 const char 的非常量指针的非常量指针”?


该函数应声明为:

void parse(int, char const * const *);

In C++, char **可以隐式添加const在所有指针深度,所以你可以将其称为parse(argc, argv).

In C, const只能在第一个指针深度处添加(这是该语言的设计缺陷)。这是一个专用线程 https://stackoverflow.com/q/35319842/841108。所以你必须将该函数调用为:parse(argc, (char const * const *)argv);很遗憾。

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

如何在 C++ 中声明指向常量的指针? 的相关文章

  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • PHP递归函数返回值[重复]

    这个问题在这里已经有答案了 我在 PHP 中编写了一个递归函数来裁剪文本 裁剪后的文本将 附加到末尾 未裁剪的文本将以其原始状态返回 如果文本适合最大宽度 则该方法有效 但是 如果它不适合给定的宽度 该函数将不会返回值 但它应该返回 看来整
  • 更改默认拨号器的请求在某些设备上不显示系统对话框

    我们的应用程序需要成为默认拨号器应用程序 也称为 默认电话处理程序 默认呼叫应用程序 以便它能够在 Android 下拨打电话新的权限策略 https support google com googleplay android develo
  • 使用 Spring Hibernate 使用注释编写更少的 DAO

    我的 Spring Hibernate 配置文件很小而且非常紧凑 我使用自动扫描来查找我的模型实体 DAOS 我不想为层次结构中的每个实体编写 DAO DAOImpl 有些可能有资格拥有自己的 例如 如果他们与其他实体有复杂的关系并且需要的
  • ruby中使用数组进行数据库查询

    我正在尝试查找数组中具有值的所有行 这是我的代码 require sqlite3 db SQLite3 Database new test sqlite res db query SELECT w1 synsetid FROM words
  • 左、中、右对齐同一行底部的 div

    我想在同一行显示三个 div 这三个都有不同的宽度和高度 并且它们不是直文本 我想左对齐一个 一直到左边 右对齐另一个 一直到右边 然后将第三个居中 在包含 div 的中间 在本例中是整个页面 此外 我希望这三个 div 与包含的 div
  • 修复错误mysql服务器已经消失[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的 VPS 经常出现故障 MySQL 服务器已消失 错误 2006 并失去连接 我增加了 my cnf 中变量的值 但情况没有改善 这是我的 cnf
  • 静默 /dev/tcp/host/port 重定向错误

    以下脚本将测试从 8079 到 8081 的 tcp 端口是否打开或关闭 for port in 8079 8081 do echo gt dev tcp 127 0 0 1 port echo port port is open echo
  • 对齐双轴刻度时出现问题

    我创建了一个有 2 个 y 轴的 matplotlib 图 y 轴有不同的比例 但我希望刻度线和网格对齐 我从 Excel 文件中提取数据 因此无法事先知道最大限制 creates double y axis ax2 ax1 twinx l
  • .netcore 应用程序 wwwroot 之外的静态文件

    我在用着https github com ebekker ACMESharp https github com ebekker ACMESharp在我的 home 网络服务器上使用 SSL 它是免费的 O 这是相当手动的 但注意到在维基上它
  • bmp宽高比问题

    我一直在尝试了解 bmp 文件的工作原理 以便我可以渲染一些 Mandelbrot 设置图片并将它们输出为 bmp 文件 因为这似乎是最简单的方法之一 但由于某种原因 当我使用不是 1 的纵横比时 1 尽管它是 4 的幂 所以不需要填充 我
  • 创建纯 HTML 的自定义 ExtJS 的最佳方法

    所以我需要创建一个ExtJS组件 版本2 3 0 该组件只是简单的 HTML 样式化 它是一个标题 我当前的方法是创建一个自定义组件 如下所示 A ExtJS component for a header for the applicati
  • 获取设备的 IMEI 代码或/和 Mac 地址

    我正在实施一种唯一标识设备的方法 建筑师向我发送了以下规格 带 Wifi 3G 的设备 IMEI 代码 设备 仅 Wifi MacAddress 两者还需要制造商 型号来完成 ID 我的问题是 如何从设备获取 IMEI 如何从设备获取制造商
  • 仅当导出的符号存在于 insmod 的 Linux 内核模块中时,如何选择性地使用它们?

    我正在修改 Linux 内核以向 Linux 虚拟服务器 LVS 添加一些功能 我开发了一个模块 我称之为net netfilter ipvs ip vs utils c 以及负载平衡时要使用的一些函数 这里的所有函数都是使用导出的EXPO
  • Visual Studio 2012 ExtJS 智能感知

    有没有办法在 Visual Studio 2012 中获取 ExtJS intelliSense 这与新的 JavaScript 支持相结合将使我的 ExtJS 项目更容易编码 在 js 文件中添加 ext all 的引用路径将提供支持 具
  • 如何将网站IE浏览器自动重定向到Chrome浏览器?

    最近 我们迁移到最新版本的应用程序 允许用户在任何浏览器中打开应用程序 早期它仅支持 IE 浏览器 迁移后 许多用户仍然在旧浏览器中打开应用程序 由于应用程序在 IE 浏览器中速度非常慢 我们正在寻找一种解决方案 当用户在 IE 浏览器中打
  • viewDidLoad (AdMob) 上的 Swift 插页式广告

    我正在关注这个tutorial http www ios blog co uk tutorials swift display ads in your application with google admob 到目前为止 当我单击按钮时
  • 使用 CMake 构建 Windows DllMain DLL

    我有一个类似的问题this one https stackoverflow com questions 29490489 create a windows shared library with dllmain function mingw
  • Selenium 中

    我正在努力从 grailed com 上删除所有 Air Jordan 数据 https www grailed com designers jordan brand hi top sneakers https www grailed co
  • java比较器,如何按整数排序?

    我试图学习java中的比较器 我在网上找到了这个很好的例子 我的问题是如何更改这段代码 以便宠物名按年龄和降序排列 以便最老的在第一个 最小的在最后 class Dog implements Comparator
  • 如何在 C++ 中声明指向常量的指针?

    我正在尝试编写一个函数来解析命令行参数 这是函数声明 void parse int char const 以防万一 我也尝试过 const char const char and cchar 用一个typedef const char cc