在C++中定义私有到公共[重复]

2023-11-27

我想定义私有和受公共保护。

#define private public
#define protected public

这在 C++ 中安全吗?


不,这几乎肯定会导致未定义的行为。

From n429617.6.4.3.1 [macro.names] /2:(来自下面的@james)

翻译单位不得#define or #undef名称在词法上与关键字、表 2 中列出的标识符或 7.6 中描述的属性标记相同。

private and public是关键词。只需做一个#define其中之一是未定义的行为if您可以使用 C++ 标准库中的任何内容:

17.6.4.1/1 [约束.概述]

本节介绍对使用 C++ 标准库功能的 C++ 程序的限制。

如果不这样做,则 17.6.4.3.1 中的限制似乎不适用。

另一种可能导致违规的方式是,如果您使用具有两个不同定义的相同结构。虽然大多数实现可能不关心这两个结构是否相同,除了public vs private,该标准不做出这种保证。

尽管如此,最常见的 UB 类型是“它有效”,很少有编译器关心。

但这并不意味着它是“安全的”。在特定的编译器中它可能是安全的(检查所述编译器的文档:然而,这将是一个奇怪的保证!)。例如,如果您通过两个不同的定义访问相同的结构,则很少有编译器(如果有)会提供上述显式工作所需的布局保证(和修改保证),即使其他错误的可能性更小。

许多编译器都会“正常工作”。这并不意味着它是安全的:下一个编译器版本可能会做出无数的更改之一,并以难以(或容易)检测到的方式破坏您的代码。

只有当回报很大时才做这样的事情。

我找不到证据表明#define如果您从不包含任何标准库头并且不使用它在两个编译单元中进行不同的定义,则使用关键字是未定义的行为。所以在严格限制的程序中,它可能是合法的。在实践中,即使它合法,它仍然不“安全”,既因为合法性极其脆弱,又因为编译器不太可能针对这种语言滥用进行测试,或者关心它是否会导致错误。

由以下原因引起的未定义行为#define private foo似乎不限于这样做before the #include of the std标头,作为其脆弱程度的示例。

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

在C++中定义私有到公共[重复] 的相关文章

  • 多个源的 makefile

    在学习 make 文件时 我试图为多个源目录编写一个 make 文件 似乎我在某个地方错了 这是我的代码结构 directory common fun2 c inc fun h src fun1 c main c 这是我的生成文件 CC c
  • json.net自定义jobject反序列化

    我正在尝试使用 JsonConvert DeserializeObject string 将字符串反序列化为可与动态一起使用的 jobject 来动态访问 json 文档 但是我想避免知道文档的大小写 以便我可以输入 dynamic doc
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • 在路由mvc 4中添加公司名称

    我一直在尝试为 Facebook 等用户提供在 URL 中添加公司名称的选项 http localhost 50753 MyCompany Login 我尝试过不同的网址 但没有成功 routes MapRoute name Default
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • CSharpRepl emacs 集成?

    我碰巧知道莫诺CSharpRepl http www mono project com CsharpRepl 是否有 emacs csharp 模式使用它在一个窗口中运行 REPL 并像 python 模式一样在另一个窗口中编译 运行 C
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC

随机推荐

  • 如何在 codeIgniter 中自定义表单验证错误

    codeIgniter 中是否有一个文件 我可以在其中进行编辑 以便自定义表单验证消息 我只是想将它们放在项目符号列表中以消耗更少的空间 这是我用来输出错误消息的代码 div class div
  • xsd.exe 生成了一个数组中包含多个元素的 C#

    我收到了一组 XML 架构文件 我无法更改 XML 因为这些有时会更新 我正在使用 xsd exe 将架构文件转换为生成的 C 代码 我无法使用任何第三方工具 XML 架构文件之一的一部分如下所示
  • 静态常量数据成员应该在哪里定义? [复制]

    这个问题在这里已经有答案了 我有课 class foo public foo foo int private static const string s 初始化字符串的最佳位置在哪里s在源文件中 任何地方在one编译单元 通常是 cpp 文
  • 模板文字作为 JSX 中的字符串内容

    我想知道在 JSX 标签内混合字符串值和变量的最佳实践是什么 我列出了我熟悉的选项 render const totalCount this state const totalCountStr Total count totalCount
  • 如何重新定义“迷你缓冲区”模式映射内的键?

    当在多个命令中接受正则表达式并提供 C p C n 历史导航时 我试图重新定义用于导航历史记录的键 除了 C p C n 之外 我还想使用其他键 例如当使用occur or 替换正则表达式 C p 和 C n 可用于转到上一个和下一个元素
  • 关联实体和关联关系属性之间的区别?

    关联实体和关联关系属性有什么区别 我的书 现代数据库管理 Hoffer 第 11 版 指出两者之间存在差异 它没有解释为什么会有差异 它只是举例说明它们的不同之处 一种关系 具有single与其关联的属性是关联关系属性 并用圆角矩形的虚线表
  • CORS 标头在浏览器中发生更改,导致内容被阻止

    更新2 完整日志 从客户的角度 请求标头 POST dev micro server php HTTP 1 1 主机 生产服务器 com连接 保持活动状态内容长度 86编译指示 无缓存缓存控制 无缓存接受 文本 html q 0 01起源
  • 无法使用 jQuery 正确设置 Accept HTTP 标头

    我正在尝试使用以下 jquery 代码将 Accept HTTP 标头设置为 text xml ajax beforeSend function req req setRequestHeader Accept text xml type G
  • R 中与跨度相关的 LOESS 警告/错误

    我正在 R 中运行 LOESS 回归 并且在一些较小的数据集上遇到了警告 警告消息 1 在 simpleLoess y x w 跨度 度数 度数 参数 参数化 在 2703 9 使用伪逆 2 在 simpleLoess y x w 跨度 度
  • 错误:在“INTO”处或附近多次指定 INTO

    在 postgresql 函数内 我试图将从表中选择的两个值放入两个变量中 但出现此错误 INTO specified more than once at or near INTO 这是 伪 代码 CREATE OR REPLACE FUN
  • 多对多关系示例

    我在这里和谷歌中没有找到任何 MYSQL 多对多关系示例 我正在寻找的是一个非常简单的示例 其中 php mysql 显示数据库的结果 有人可以写一个非常简单的例子吗 示例场景 大学的学生和课程 一个特定的学生可能会参加多门课程 当然一门课
  • 使用以反斜杠结尾的字符串时,ConvertTo-Json 会引发错误

    以下代码位会产生错误 W surge ogre gt SolutionDir W Surge ogre ConvertTo Json ConvertTo Json The converted JSON string is in bad fo
  • 在 dealloc 中调用 super 是否重要?

    void dealloc super dealloc receivedData release receivedData nil or void dealloc receivedData release receivedData nil s
  • 应用程序崩溃异常类型:EXC_CRASH (SIGKILL) 终止原因:命名空间 SPRINGBOARD

    我的应用程序最近被拒绝 因为该应用程序在启动时被 beta 测试人员崩溃 但在开发配置文件中运行它时 这种情况不会发生 我可以知道这个崩溃日志是什么意思 何时以及如何解决它 指南 2 1 性能 应用程序完整性 我们无法审核您的应用程序 因为
  • 多处理 - 管道与队列

    队列和管道之间的根本区别是什么Python 的多处理包 在什么情况下应该选择其中一种而不是另一种 什么时候使用比较有利Pipe 什么时候使用比较有利Queue 简短的摘要 截至 CY2023 此答案中描述的技术已经过时 这些天 您可以使用p
  • 如何更改Python-pptx创建的表格中文本的字体大小

    我正在创建一个脚本来显示产品性能图表 并创建一个表格来显示其零件编号 应用程序列表和当前应用程序的数量 但是 默认字体大小太大 无法将所有这些信息放入幻灯片中 需要减小 如何减小 Python pptx 表格中文本的字体大小 这就是我所拥有
  • 为什么 setlocal 会干扰 Windows 批处理文件中的 chdir?

    如果我运行批处理文件 setlocal chdir 目录没有改变 但是如果我运行 setlocal endlocal chdir 它工作正常 这一定正是 setlocal 所期望的 然而 当你阅读setlocal的定义时 并不完全明显 这与
  • 如何为所有网页制作相同的布局

    我目前正在研究 HTML 我想问一个有关网站开发的问题 我正在开发一个网站 其中基本布局保持不变 如菜单 侧边菜单等 但只有内容发生变化 目前我已经为所有内容制作了单独的 html 文件网页 谁能告诉我有没有一种方法可以让我创建一个单独的文
  • 合并具有不同列名的表

    如果我理解正确的话 默认情况下data table通过比较设置为键且具有相同名称的列来合并两个表 如果我有不同列名的表应该怎么写 例如 set seed 123 DT1 lt data table col1 sample letters 5
  • 在C++中定义私有到公共[重复]

    这个问题在这里已经有答案了 我想定义私有和受公共保护 define private public define protected public 这在 C 中安全吗 不 这几乎肯定会导致未定义的行为 From n429617 6 4 3 1