c – 私有使用基础构造函数的声明不是私有的

前端之家收集整理的这篇文章主要介绍了c – 私有使用基础构造函数的声明不是私有的前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
基础构造函数的using声明是私有的,但仍然可以构造该类.为什么?

可访问性对于operator []使用必须公开的声明的工作方式不同.

#include <vector>

template<typename T>
class Vec : std::vector<T>
{
private:
    using std::vector<T>::vector;       // Works,even if private. Why?
public:
    using std::vector<T>::operator[];   // must be public
};

int main(){
    Vec<int> vec = {2,2};
    auto test = vec[1];
}

如果我希望构造函数是私有的,该怎么办?是否可以使用声明来完成?

解决方法

无论基类的可访问性如何,基类构造函数的using声明都保持与基类相同的可访问性.从 [namespace.udecl]开始:

A synonym created by a using-declaration has the usual accessibility for a member-declaration. A using-declarator that names a constructor does not create a synonym; instead,the additional constructors are accessible if they would be accessible when used to construct an object of the corresponding base class,and the accessibility of the using-declaration is ignored

重点补充

用简单的英语,from cppreference

It has the same access as the corresponding base constructor.

如果希望“继承”构造函数是私有的,则必须手动指定构造函数.你不能用using声明来做这件事.

原文链接:https://www.f2er.com/c/119805.html

猜你在找的C&C++相关文章