0.C与C++部分区别

标准库

  • C++的标准库头文件将不带.h后缀,且为C标准库也重新定义了一系列不以.h为后缀的头文件。
  • 但新式的C头文件只是对旧式C头文件进行了一系列封装
/*cstdio*/
...
#pragma GCC system_header

#include <bits/c++config.h>
#include <stdio.h>

#ifndef _GLIBCXX_CSTDIO
#define _GLIBCXX_CSTDIO 1
...

空指针

  • C语言中的NULL被定义为(void*)0
  • 而在C++中,NULL被定义为0
/*MSVC中定义*/
#ifndef NULL
    #ifdef __cplusplus
        #define NULL 0
    #else
        #define NULL ((void *)0)
    #endif
#endif
  • 在C++中如果要使用空指针,需要使用nullptr;其实际上是一个std::nullptr_t类型的对象
int main(){

    std::cout << NULL << std::endl;		//0
    
    std::cout << nullptr << std::endl;	//nullptr	
    //可以发现nullptr并非简单的(void*)0
    return 0;
}

void参数

  • C11标准下,函数定义时,如果参数列表不填,将视为任意参数列表
void call(){
    printf("call\n");
}

int main(void){
	
	/*以下代码均能正常编译*/
    call(1,2,3);	//call
    call(1);		//call
    
    return 0;
}
  • 而在C++11中,函数定义时,参数列表为void或不填没有任何区别
  • 这也就是为什么在C中,如果函数不需要参数,最好加上void,而在C++中则不需要

无名形参和默认实参

  • C++支持无名形参和默认实参,C并不支持
  • 无名形参,即可以只指定参数类型,而无需参数名
void call(int){
    std::cout << "call" << std::endl;
}

int main(){

    call(0);	//call

    return 0;
}
  • 默认实参,被赋予默认值的形参后所有的形参,都必须拥有默认值
void call(int arg_1 = 10,double arg_2 = 0){
    std::cout << "call" << std::endl;
}

int main(){

    call(0);	//call

    return 0;
}

结语

  • 有任何错误评论区指正,共同进步
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值