C与C++的一些不同之处

以前也没多注意C和C++有什么差别,感觉C++没有类,模板和引用,那么C++就是C
近几天特别注意了这方面的问题,发现以前想的还是有问题的。
去掉了类,模板和引用的C++和C还是有一定的差别的。
下面列了几点还多多指教

函数原型
在C++中函数原型是必须的,而C中是可选的
在C中圆括号意味着前向原型声明,但在C++中就意味着函数没有原型
例如
int test();
int main()
{
    int test(4,5);
}
int test(int a,int b)
{
}
在C的旧风格中可以接受的,但是在C++中就会产生一个错误
C++允许声明函数名相同的多个函数,只要他们具有不同的参数表

char常量
char常量在C中被认为int类型的,C++中则被看成是char类型的
例如
char ch=‘A’;
在C中,常量‘A’的字符编码存储为一个int值,相同的数值也被存储在变量ch中,但是在ch中只占据内存中的一个字节,
在C++中,‘A’和ch都是使用一个字节

const修饰符
C中全局的const具有外部链接,C++中他具有内部链接
C++中的const double PI=3.14159;
相当于C中的static const double PI=3.14159;
前提两者都在所有函数的外部
C++的意图是使得在头文件中使用const更加的简单
C++中可以使用extern使一个const值具有外部链接
两种语言都可以创建具有内部和外部链接的常量,不同的只是在于默认使用哪种链接
C++中可以使用const value初始化const,但是在C中就不可以
例如
const int a=1;
const int b=2;
const int c =a*b; /*C++合法,C非法*/

结构和联合
声明一个带标记的结构和联合之后,在C++中就可以使用该标记作为类型名了
struct point
{
    int x;
    int y;
};
struct point m;         /*C合法,C++合法*/
point n;                /*C不合法,C++合法*/

在C++中结构名可能与变量名相冲突。
#include <stdio.h>

float point = 10.001;

int main()
{
    struct point {int x;int y;};
    struct point m = { 2, 4};

    printf("%f/n",point);       /*C可以,C++不可以*/
    return 0;
}
C++把printf()中的point解释为结构类型而不是外部变量。
struct box
{
    struct point {int x;int y;} upperleft;
    struct point lowerright;
};
c中可以使用任一结构,c++中使用嵌套结构要求一个特殊的符号::。
strcut box ad;      /*C合法,C++合法*/
strcut point dot;   /*C合法,C++非法*/
box::point dot;     /*C++*/

枚举
对于枚举,c++比c更严格
使用枚举enum变量可以做的唯一有用的是为他赋予一个enum变量后和其他的之进行比较;不经过显式的类型转换就不可以把int值赋给enum变量,而且也不能递增一
个enum变量。
enum sample {sage,thyme,salt,pepper};
enum sample season;
season =sage;           /*c,c++*/
season =2;              /*c warnning,c++ error*/
season =(enum sample) 3;    /*C,C++*/
season++;                   /*C可以,C++ error*/
C++允许声明是不用关键字enum
sample season;  /*C非法,C++合法*/
如果一个变量和enum类型有相同名字就会有冲突。

指向void的指针
C,C++可以把任意类型的指针赋值给指向void的指针,
C++中除非使用了显式的类型转换,否则不能将指向void的指针赋值给其他类型的指针。
int arg[5]={1,2,3,4,5};
int *pi;
void *pv;
pv = arg;       /*C,C++*/
pi = pv;        /*C合法,C++非法*/
pi = (int*)pv;  /*C,C++*/
C++中可以把派生类对象的地址赋值给其他类型的指针,C中不存在。

bool类型
C++中布尔类型是bool,true,false是关键字;
C中包含了stdbool.h在可以使用true和false。
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zeloas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值