c++ - 继承构造函数的 C++ 可见性
问题描述
当我using
这样使用时,为什么构造函数是公开继承的?
class Base {
int x;
public:
Base(int x);
};
class Derived : public Base {
using Base::Base;
};
我现在可以这样做:
Derived d (2);
我认为using
声明具有它们所在位置的可见性。在这里,它应该是私有的。
来自C++ 编程语言:
通过 using-declaration 引入派生类范围的名称的访问权限由 using-declaration 的位置决定;
解决方案
根据 C++17 标准(10.3.3 使用声明)
19 由using-declaration创建的同义词具有member-declaration的通常可访问性。命名构造函数的using-declarator不会创建同义词;相反,如果附加构造函数在用于构造相应基类的对象时可访问,则它们是可访问的,并且using-declaration的可访问性被忽略。
推荐阅读
- php - 如何在 foreach 查询中插入第二个 foreach 查询?
- python - 分别对有状态和无状态 LSTM 网络以及 input_shape 感到完全困惑
- python - 从 .mat 文件创建 ndarray,但如何格式化 pandas 数据框?
- python - 如何在年龄计算器中加入闰年?
- function - Haskell:两次应用翻转(翻转类型)
- html - 从右到左浮动 HTML 和 CSS
- joomla - 致命错误:升级到 3.9 版本后在 Joomla 中找不到类“F0FTable”
- symfony - 如何删除渲染的多余字段组?
- javascript - 使用 HTML 锚或 javascript下载企业 GitHub 资产
- jquery - Bootstrap Hamburger 菜单在 Electron 上不起作用(在 Node 上工作)