首页 > 编程语言 > 详细

C++学习杂谈1(extern、cosnt引用&指针)

时间:2016-03-10 18:38:57      阅读:199      评论:0      收藏:0      [点我收藏+]

extern的用法:
.cpp 1
#include <iostream>

using namespace std;

extern int i;

int main(int argc, char** argv) {
cout << i << endl;
return 0;
}

.cpp 2
#include <iostream>

int i = 100;


注意:在测试的时候.cpp 2没有加头文件#include<iostream> 导致编译报错。

另外的:

const限定符

除了将其修饰的对象变为常量对象外,还有其他的特点:

1,因为const对象一旦创建后其值就不能改变,所以const对象必须初始化。
2,默认状态下,const对象仅在文件内有效。

当多个文件中出现了同名的const对象时,其实等于在不同文件中分别定义了独立的变量。
当const对象确实有必要在文件中共享时。解决的办法是,对于const变量不管是声明还是定义都添加extern
关键字

.cpp 1
#include <iostream>

using namespace std;

extern int i;
extern int bufSize;

int main(int argc, char** argv) {
cout << i << endl;
cout << bufSize << endl;
return 0;
}


.cpp 2
#include <iostream>

extern const int bufSize = 100;
int i = 10;


-----------------------------------------------------------------------------------------

使用指针时:

int *p = 42; // 错误,解引用的操作仅适用于那些确实指向了某个对象的有效指针;

int ival;
int *p = &ival;
*p = 42; // 正确!

-----------------------------------------------------------------------------------------

引用和指针的基本区别:

1,引用在定义的时候必须初始化;指针不用。
2,应用是对一个对象的绑定,可以看做是一个对象的别名;指针是一个确实的的对象,可以进行对对象的各种
操作(左值)
3,指针在其生存周期中可以改变指向的对象,而引用只能指向一个对象。

误区代码:
#include <iostream>

using namespace std;

int i = 100;
int q = 10;

int main() {
int &u = i;
int *p = &i;
cout << u << *p << endl;
u = q; // 这里的u并不是改变了引用绑定的对象,而是改变了u/i的值,这是一个拷贝的过程。
p = &q; // 这里的p改变了指针指向的对象,指向q。
cout << u << *p << endl;
return 0;
}


---------------------------------------------------------------------------------------------------


const经典错误


#include <iostream>

using namespace std;

int main() {
int r1 = 2;
int &r2 = r1 * 2; // 错误,r2这时候绑定的是一个右值;
const int &r2 = r1 * 2; // 正确,cosnt修饰的引用可以绑定右值;
}


这里又回到了说指针和引用的不同:
指针除了继承部分的特殊情况外,初始化的时候类型必须严格匹配。
但是引用却有所不同,在算数类型中,引用允许类型之间的转换,但是由于转换的过程中会出现临时对象
即为右值;所以这时候应该遵守右值的绑定规则——普通的左值引用只能const绑定右值。

 

C++学习杂谈1(extern、cosnt引用&指针)

原文:http://www.cnblogs.com/xiaodukuko/p/5262840.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!