C++类到底存不存在缺省无参构造函数

学习C++的时候有个问题老是忘,就是缺省无参构造函数,说的是定义类的时候,如果类本身没有构造函数,则调用一个缺省的无参构造函数,如果有构造函数,则就一定要按照构造函数的方式调用,这意味着如果定义了一个有参数的构造函数,那么在定义类的时候就一定要调用有参的那个构造函数,缺省的无参构造函数就不存在了。 说实话,当时学的时候感觉有点不可思议,但还是稀里糊涂的接受了,很多教材也是这样写的,但是真是这样吗,最近折腾llvm,它的IR对编译器动作表示的比较清晰,特意反汇编了一把看看,代码如下:

#include <iostream>
using namespace std;

class test {
    public:
    int i;
    //test() {};
};
int main(void)
{
    class test a;
    cout << a.i << endl;
    a.i = 9;
    cout << a.i << endl;
    return 0;
}

运行结果:

-2003910432
9

注释去掉,添加自定义构造函数后会报错

反汇编对比:

可以看出,并没有所谓的缺省无参构造函数。

时间: 2025-01-31 03:47:01

C++类到底存不存在缺省无参构造函数的相关文章

java-第十三章-类的无参方法(一)-模拟账户查询,实现存取款

package 上机练习; import java.util.Scanner; public class A04class { double Money = 0; public double showA() { return Money; } public void showB(double money) { Money += money; System.out.println("当前余额:" + Money); } public void showC(double money2) {

java-第十三章-类的无参方法(一)-查找客户姓名

package 上机练习; public class A02class { String names[] = new String[30]; public void showA(String name) { for (int i = 0; i < names.length; i++) { if (names[i] == null) { names[i] = name; break; } } } public void showB() { System.out.println("\t客户列表

java-第十三章-类的无参方法(一)-实现图形生成器

package 上机练习; public class A03class { public String showA(int rows, String ch) { for (int i = 0; i < rows; i++) { for (int j = 0; j <= i; j++) { System.out.print(ch); } System.out.println(); } return ch; } } package 上机练习; import java.util.Scanner; p

java-第十三章-类的无参方法(一)-代参方法的编程计算器

package 本章总结; public class A01class { public int ope(int Operator, int num1, int num2) { switch (Operator) { case 1: num1 += num2; break; case 2: num1 -= num2; break; case 3: num1 *= num2; break; case 4: num1 /= num2; break; default: System.out.print

java-第十三章-类的无参方法(一)-模拟一个简单的购房商贷月供计算器

package 本章总结; public class A02class { double Money = 0; public double showA(double money, int choice) { switch (choice) { case 1: Money = (money + money * 0.0603) / 36; break; case 2: Money = (money + money * 0.0612) / 60; break; case 3: Money = (mon

java-第十三章-类的无参方法(一)-根据三角形的三条边长,判断是直角,锐角还是钝角三角形

package 本章总结; public class A03class { public boolean showA(int a ,int b ,int c){ boolean con=false; if((a+b)>c&&(a+c)>b&&(c+b)>a){ con=true; } return con; } public String Shape(int a,int b,int c){ String shape=""; if((a=

类的无参带参方法

类的无参方法 1.什么是类的方法 类是由一组具有相同属性和共同行为的实体抽象而来的,对象执行的操作是通过编写类的方法实现的. 2.如何定义类的方法 类的方法必须包括以下三个部分: ① 方法的名字 ②方法的返回值类型 ③方法的主体 语法:   public 返回值类型  方法名(){ //方法的主体 } 编写方法时,分两步完成: 第一步:定义方法名和返回值.    第二步:在{}中编写方法的主题部分. 但要注意一下三点:① 方法体放在一对大括号中,方法体就是一段程序代码,完成一定的工作. ②方法名

房上的猫:类的无参方法及JavaDoc注释

一.类的无参方法 1.概述:  (1)类是由一组具有相同属性和共同行为的实体抽象而来的  (2)对象执行的操作是通过编写类的方法实现的  (3)类的每一个方法都实现了一个功能 2.定义类的方法  编写方法:   (1)定义方法名和返回值类型   (2)在{}中编写方法的主体部分   注意:    (1)方法体放在一对大括号中(方法体就是一段程序代码,完成一定的工作)    (2)方法名主要在调用这个方法时使用(在java中一般采用骆驼式命名法)    (3)方法执行后可能会返回一个结果,该结果的

那一夜,我们梦寐以求的类的无参方法

今天,我们探讨一下类的无参方法的使用,主要有3个核心点: 01.有返回值方法的定义 02.成员变量和局部变量的区别 03.Java文档注释 废话不多说,直接切入正题:提到方法,大家都知道,可以将方法看成一个“黑匣子”,也就意味着作为方法调用方的我们 不需要知道方法体中具体内容的实现,我们只需要知道方法的名称及其返回值类型. 下面就做一个快速入门(Quick Start),或者说是最佳实践 //我想让方法返回一个字符串(一句话) public String sayHello(){ //System