c++ 学习 随笔一

1、我最开始写程序时,那个时候出了错误其实不知道怎么调试,主要是编程工具的调试方法还没有掌握,所以最常用的方法就是输出标识语句用于调试作用,看看程序执行到哪里错误,也就是没有输出标识句的那个部分;然后再一点一点看代码,仔细查找问题到底出现在哪里。之后在学3D的时候碰到了大名鼎鼎的缓冲区以及刷新的概念,我忽然想起自己学习c++时,也或者所有语言在内存区域分配内存都是这个样子,也就是刷新缓冲区。因为很多时候,我们是把我们的操作放到缓冲区中,再将缓冲区中的东西刷新到屏幕。这样理解起来,应该对内存的管理又懂了一点点。

2、c++中,无论是输出还是输入符,总是返回左操作数,也就是总是能够返回输入、输出流本身,所以,可以将由操作数连起来。

cout<<a<<b<<endl;
3、在写程序时,最开始我们经常会看到添加头文件有时用<>,有时用" ",其实原因非常简单,<>中加的头文件是标准库中的头文件,而" "中加的文件不是标准库中的文件。

4、机器当中处理结构方便的方式,就是将结构块化。其实就是说处理时一块一块处理,一般机器中以8个比特位为一个字节,有的32位机就是4个字节为一个字,相同的道理64位机,8个字节为一个字。并且每个机器对待同一类型的内存分配不同,比如int整型,有的机器是16位,有的机器是32位,所以在int,unsigned,long等类型的使用过程中因不同类型的使用会导致机器的效率大大不同。比如float和double,有的机器处理double类型数据要远比float类型效率高。所以,类型的选择也会很大程度上影响处理的效率。

5、在程序当中,我们会经常看到这样两个字符类型,char,w_char,'A'为char类型,但是L'A'就为宽字符类型;说到这里,我们也可以考虑一下字符串和宽字符串,形式与字符是基本相同的。字符串支持+操作,但是,如果我们将字符串与宽字符串相+时,编译会报错,所以字符串与宽字符串是两种完全不同的类型。

6、说起初始化,大家应该都不陌生,随便看一种类型的几种初始化方法:

int a(10);
int b = 10;
怎么样,没错吧?!没错,第一种方式叫直接初始化,第二种方式叫复制初始化。在这里要提醒一句,赋值绝对和初始化是两种不同的行为,绝对不能混为一谈,下面再看一个例子:

string a("abcd");
string a = "abcd";
形式与整型基本没有什么区别,但是仍然有细微的区别。第二种形式当中,机器在存储"abcd"字面值时并不是string类型,所以在执行string = "abcd";时,发生了类型转换,所以产生了临时对象,而执行int b = 10;时,没有产生临时对象。

7、我们经常会提到默认初始化的概念,没错,我在最开始也c++程序时也是这样想,所以经常声明完变量就扔在那儿,总是以为机器自动为它初始化好了;但是实际情况不完全是这样的,在c++的内置类型当中,只有在声明全局变量时才会产生默认初始化,在函数局部声明的变量,没有发生初始化。并且,使用没有初始化的行为,是一件非常可怕的事情,在jacabi迭代的那篇博客当中,我就提到过。所以,为了避免这样的错误发生,最好的方式就是,尽量在第一次使用该变量的时候声明,再初始化这样不会忘记。并且多说一句,const和引用类型声明是必须初始化。

8、讲到const多说一句,当程序多了的时候,我们不可能都在一个文件当中写下所有的程序,为了方便我们使用头文件,假设我们要在头文件中定义变量,在别的文件中使用,如果是非const变量,我们在头文件中直接声明,int a ;然后在文件中声明即可,extern int a;但是如果头文件中加的const的话,则必须声明是extern const int a =10,本文件中extern int a;这样才可以,因为const变量默认为本文件使用有效,而非const变量默认全局有效。这里一定要加一句,头文件中不应含有定义的规则,对于const和inline函数是不适合的,这一点要注意。

9、引用声明时必须初始化,而且初始化必须用同类型来初始化,常引用只能用常量来初始化。

10、非const引用只能绑定到同类型的对象上;但是const引用这可以绑定到所有的类型对象。

想想为什么,前面讲过的临时对象,有没有,瞬间开朗了有没有!然后又想到右引用,有没有!blabla一大串,C++果然博大精深啊!

11、再说说枚举,说实话枚举我用的却是是少,但是略懂一点。其中有几个关键点,枚举中的值初始化时都是常量或常量表达式;提供默认的初始化,并且是依次+1的操作;还有枚举初始化时只能用同一枚举类型来初始化。

12、说起C++,第一个想到的就应该是类,但是我们接触的"类"却不是class,而是struct,这一点相信大家都应该能够理解。class和struct的区别就在于,类的成员默认访问级别是private,而结构体默认是public。

13、说到头文件落下了一个点,就是在程序当中反对多重定义,但是又要添加多个头文件,所以 :

ifndef ××××
define ××××

endif
帮助我们很好的解决了问题。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值