C++中合成的默认构造函数的访问权限

问题

我们知道,在C++中,如果没有为一个类显式定义构造函数,那么编译器会为我们隐式地定义一个默认构造函数。那么,你有没有想过,这个隐式定义的默认构造函数(合成的默认构造函数)的访问权限是什么呢?它跟类中其他成员的权限有没有什么关系呢?

比如,下面这个类,它的所有成员都是 private 的,那么它的合成的默认构造函数会是 private 的吗?

class MyClass {
// 编译器为MyClass合成的默认构造函数的访问控制权限是什么呢?
private:
	int val1;
	double val2;
	void info();
};

分析

事实上,通过编码很容易找到答案:

class MyClass {
// 编译器为MyClass合成的默认构造函数的访问控制权限是什么呢?
private:
	int val1;
	double val2;
	void info();
};

void func() {
	MyClass obj;	// 正常编译,不会报错,说明默认构造函数是public的
}

从上面的代码可以看出,实际上编译器合成的默认构造函数永远都是 public 权限的,无论其中的成员是什么访问权限

关于这一点,cppreference 中也有清晰的说明:

If no user-declared constructors of any kind are provided for a class type, the compiler will always declare a default constructor as an inline public member of its class.
如果用户没有为一个类提供任意种类的构造器,编译器总是会为该类声明一个作为内联公共成员的默认构造器。


拓展

事实上,不仅仅是合成的默认构造函数,包括编译器合成的拷贝控制成员(合成的拷贝构造函数、合成的移动构造函数、合成的赋值运算符和合成的析构函数),也都是永远是 public 的。

参考

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-13 03:10:09       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-13 03:10:09       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-13 03:10:09       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-13 03:10:09       18 阅读

热门阅读

  1. 王者荣耀铭文说明

    2024-05-13 03:10:09       10 阅读
  2. Spring Boot的工作原理

    2024-05-13 03:10:09       9 阅读
  3. HTTP协议

    2024-05-13 03:10:09       11 阅读
  4. mybatis 模糊查询的几种方式

    2024-05-13 03:10:09       10 阅读
  5. Python 自动化脚本系列:第3集

    2024-05-13 03:10:09       13 阅读
  6. 拼接图片路径不显示:vue

    2024-05-13 03:10:09       10 阅读
  7. 力扣 516. 最长回文子序列 python AC

    2024-05-13 03:10:09       15 阅读
  8. 【linux软件基础知识】-cdev_alloc

    2024-05-13 03:10:09       11 阅读
  9. halcon学习之形状匹配

    2024-05-13 03:10:09       6 阅读
  10. logback 日志脱敏

    2024-05-13 03:10:09       7 阅读
  11. Google Gemma 2B 微调实战(IT科技新闻标题生成)

    2024-05-13 03:10:09       12 阅读
  12. 生成ssh来连接git

    2024-05-13 03:10:09       11 阅读
  13. 旋转木马案例

    2024-05-13 03:10:09       8 阅读
  14. HTTP 结构概述

    2024-05-13 03:10:09       11 阅读
  15. Android app通过jcifs-ng实现Samba连接共享文件夹

    2024-05-13 03:10:09       10 阅读