我应该从私有派生类到其基类进行指针转换吗?

2024-06-30

我从 C++FAQ 中找到了这个

一般来说,没有。

来自成员函数或某个成员的朋友 私有派生类, 与基类的关系是 已知,并且向上转换 PrivatelyDer* 到 Base*(或 PrivatelyDer& to Base&) 是安全的;不 需要或推荐演员。

然而 PrivatelyDer 的用户应该 避免这种不安全的转换,因为它 是基于私人决定 PrivatelyDer,并且可能会发生变化 不知不觉中。

上面这句话怎么理解呢?我认为这个解释不正确或准确。

我有这样的代码

class A{
};

class B: private A{
};

int main(){

    B *b = new B();
    A *a = new A();

    a = b;                    //wrong
    a = (A*)b;            //right

}

从纯粹的机械角度来看,您是对的:对私有基类的强制转换将起作用并产生工作结果。

常见问题解答的要点是,从设计的角度来看,它通常是错误的。私有继承实际上应该意味着私有——换句话说,即使它可能起作用,你也不应该知道它会起作用,并且在某些时候它可能会停止工作——因为它是正式的实现细节,而不是作为公共接口的一部分,他们可以在不使用继承的情况下重新实现该类。到那时,强制转换将不再起作用(但是因为您已经使用了强制转换,编译器可能不会警告您它已经从您可能不应该做的事情变成了不可能工作的事情根本没有)。

编辑:是的,演员阵容does必然有效。根据标准§5.4/7:

...以下 static_cast 和 reinterpret_cast 操作 (可选地后跟 const_cast 操作)可以使用执行 显式类型的强制转换表示法 转换,即使基类 类型不可访问:

— 指向派生对象的指针 类类型或派生的左值 类类型可以显式转换 指向一个指针或一个引用 明确的基类类型, 分别;

[强调]

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

我应该从私有派生类到其基类进行指针转换吗? 的相关文章

随机推荐

  • 检查警报框中单击“确定”按钮

    这是用于提醒某些值的代码 alert Click the OK button Now 所以现在我想检查是否单击了 确定 按钮 我怎样才能使用这个 JavaScript 来做到这一点 确认可以工作 var r confirm Click th
  • JavaFX 本机捆绑包图标 OS X

    我正在尝试使用 IntelliJ IDEA 14 为 JavaFX 应用程序创建本机 OS X 应用程序包 我已经设置了一个 Artifact 并将本机包选项设置为 dmg 这确实创建了一个本机捆绑包 但我似乎找不到更改应用程序图标的方法
  • 安装atomic (1.1.16) 时出错,Bundler 无法继续

    我正在尝试创建一个新的 Rails 应用程序 但在捆绑时会出现此错误 这是我第一次遇到这个错误 Gem files will remain installed in usr local rvm gems ruby 1 9 3 p448 ge
  • 获取AppKernel.php中的parameters.yml参数

    有人知道如何获取 AppKernel php 中的parameters yml 或 dev 吗 我想动态更改 LogGer 变量 mylogsdir 应用程序内核 php this gt rootDir this gt environmen
  • 第一次使用CodeBuild时出现错误

    当作为简单代码管道的一部分启动代码构建时 我在几秒钟内收到以下错误 Action execution failed Error calling startBuild Cannot have more than 0 builds in que
  • Webpack 加载器中的“包含”和“排除”如何工作

    更新及解答 我的误解是 所有导入 所需的文件都将由加载程序转换 但是 某些导入 所需的文件不需要转换 例如 node module 中的js文件已被处理 所以不需要再通过Babel loader进行改造 这基本上就是为什么我们需要在加载程序
  • MVC网站-如何防止访问静态文件

    我有一个 MVC 网站 没有身份验证 在网站目录中 我有一个文件夹 ProjectNotes 其中包含一个文件 Notes txt 此文件夹和文本文件都不是解决方案的一部分 但仍会在发布时复制 我的问题是 任何人都可以使用网络浏览器访问 m
  • 使用 C# 强制本地用户在下次登录时更改密码

    我正在为 ASP NET 中的 Web 应用程序编写一个函数 其中客户端登录到服务器计算机 该服务器计算机是针对服务器上的本地用户进行 Windows 身份验证的 我正在编写的函数会重置用户密码并通过电子邮件向他们发送新密码 我这样做 St
  • 打印当月每周的第一个星期一 Flutter/Dart

    我的 Flutter 应用程序中有一个日历 我需要打印当月的几周列表 但不是从每个月的第一天开始 而是需要从该月的第一个星期一开始 例如 2021 年 4 月 5 日作为 2021 年 4 月的第一个星期一 然后我需要打印出该月接下来的几周
  • Tampermonkey 用户脚本可以访问 Chrome API 吗?

    我正在开发一个需要的用户脚本chrome对象 但我无法访问它 如何访问chrometampermonkey 用户脚本中的对象 也许 清单中的一些权限或者什么 参考Chrome 扩展代码 vs 内容脚本 vs 注入脚本 https stack
  • WPF 数据网格性能

    我正在使用 WPF Toolkit 数据网格 它目前滚动速度非常慢 该网格有 84 列和 805 行 包括 3 个固定列 标题是固定的 水平和垂直滚动都非常慢 虚拟化已打开 并且我已在 xaml 中显式启用列虚拟化和行虚拟化 是否有什么需要
  • IE8安全警告

    在我正在处理的 https 网站上 我不断收到 您只想查看安全传送的网页内容吗 此网页包含不会使用安全 HTTPS 连接传送的内容 这可能会损害网站的安全性整个网页 我确保该网站有相关链接 表单操作也是相对的 所有图像 src 也是相对的
  • 无法理解让我们C静态存储类示例[重复]

    这个问题在这里已经有答案了 我无法理解 Yashwant Kanetkar 的 Let us C 中的示例 这是代码片段 main int j int fun j fun If we add a function call here the
  • 多次使用属性时的性能考虑

    我在用CultureInfo CurrentCulture当使用格式化我的字符串时string format 去引用这个博客 http goatly spaces live com Blog cns ED869F22AB5C24A8 171
  • varchar 值的转换溢出了 int 列

    对于某些值 nReservationID SELECT phoneNumber CASE WHEN ISNULL rdg2 nPhoneNumber 0 0 THEN ISNULL rdg2 nMobileNumber 0 ELSE ISN
  • 如何矢量化 pandas 数据框前向列值搜索

    我想仅在前向搜索 pandas 数据帧列中的目标值 如果找到更大的值 那么我想将索引差异记录为结果列 我已经设法用两个内部 for 循环来做到这一点 但速度慢得令人痛苦 这就是我想在一个简化的示例中实现的目标 import pandas a
  • 如何使用 Apple GCC 4.2.1 重载 __m128 SSE 类型的 +、-、*、/、/= 等运算符?

    我正在将游戏移植到OS X 它使用运算符重载 m128键入如下 forceinline m128 operator m128 a m128 b return mm sub ps a b forceinline m128 operator m
  • std::bad_alloc 之后 std::vector 的状态

    我试图找到一个在线参考来查看几个 std 容器的异常安全性 如果是std vector 它是否保留push back调用之前的状态 我假设向量的所有对象仍然有效 没有调用析构函数 提供什么保证std vector在push back抛出一个
  • 如何安全地完成一个线程中的映射操作,而不使另一个线程中的迭代器无效?

    我有两个线程在共享地图上运行 一个线程 名为线程 1 不断向映射中插入对 另一个线程 名为线程 2 不断获取映射的第一个元素 对该元素执行一些操作 最后将其从映射中删除 在线程 1 插入元素后 线程 2 所操作的元素是否恰好位于映射的开头并
  • 我应该从私有派生类到其基类进行指针转换吗?

    我从 C FAQ 中找到了这个 一般来说 没有 来自成员函数或某个成员的朋友 私有派生类 与基类的关系是 已知 并且向上转换 PrivatelyDer 到 Base 或 PrivatelyDer to Base 是安全的 不 需要或推荐演员