gpt4 book ai didi

c++ - 访问控制对已删除的构造函数是否重要?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:36 26 4
gpt4 key购买 nike

显式删除的构造函数是publicprotected 还是private 在行为上有区别吗?

例如,一个不可复制的类将有一个删除的复制构造函数(和删除的复制赋值)。构造函数对子类(或 friend )和类的外部用户都不可用,因为它不存在,无论其访问控制如何。

我看到的唯一区别是不同的作用域会以何种方式看到复制构造函数不存在——它是否不存在(就该作用域所知)还是被显式删除。

现在,为该类提供最好的正式接口(interface)可能是有益的——也就是说,如果每个人都应该知道该类是不可复制的,那么它应该被公开删除。编译器错误消息也可能提供更多信息。但除此之外——类行为是否有任何实际可观察​​到的差异?也就是说,如果一个类的已删除构造函数具有访问权限 X,他可以做一些事情,而如果该构造函数具有访问权限 Y,他就不能做什么?

最佳答案

由于在这种情况下是重载决议导致程序格式错误,而不是访问说明符(稍后检查),因此结果没有区别。编译器总是会提示选择了一个已删除的函数。

但由于 C++11 之前的习语是“声明但不定义私有(private)复制函数以禁用复制”,我认为它与相同的习语一致,因此是有利的.您正在使用带有一些新语言的“旧俚语”来描述同一事物,但更好。

关于c++ - 访问控制对已删除的构造函数是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49717994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com