C++ 一些机制了解

1. 为什么要使用 extern "C" ?

C++和C语言的编译方式有一些区别, extern "C" 是 为了让CPP和C接口能够通用。


CPP支持多态性,具有相同函数名但参数不同的函数,可以通过参数区分具体调用的是哪一个函数。在编译的时候,CPP编译器会将参数类型和函数名连接在一起,编译成为目标文件。

但是在C语言中没有多态性的概念。C编译器在编译时只会在函数名前面添加一个下划线。由于这种的原因,当采用CPP与C混合编程的时候,就可能会出问题.

例如: 

头文件中定义了这样一个函数:    int foo(int a, int b);

而这个函数的实现位于一个.c文件中,同时,在.cpp文件中调用了这个函数。

那么,当CPP编译器编译这个函数的时候,就有可能会把这个函数名改成_fooii,这里的ii表示函数的第一参数和第二参数都是整型。
而C编译器却有可能将这个函数名编译成_foo。

连接器工作的时候,发现在.cpp中调用了foo()函数,但是在目标文件中却找不到_fooii这个符号,于是提示连接过程出错。

extern "C" {}这种语法形式就是用来解决这个问题的。 把_foo改成_fooii进行编译。

 

2. 指针相减操作

以下代码的输出结果是什么?

double dArray[2] = {4, 8}, *p, *q; 
p = &dArray[0]; 
q = p + 1; 
cout << q – p << endl;  
cout << (int)q - (int)p << endl; 

结果: 1  和  8

解释: 第一个是指针加减,按照的是指向地址类型的加减,只跟类型位置有关。q 和p 指向的数据类型以实际数据类型来算差一个位置,因此是1。

而第二个加减是实际指针值得加减,在内存中一个double类型占据8个字节,因此是8 

3. 默认构造函数

按默认构造函数定义对象,不需要加括号 

4. 三元表达式

三元表达式“?:”问号后面的两个操作数必须为同一类型 

5. 变量与常量

把一个变量赋值给一个常量,常量会变成变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值