c++学习笔记(2)

1.对于定义好的函数bool fibon_elem(int pos, int &elem){}, 调用的时候写fibon_elem(pos, elem)就可以,不需要在调用过程中使用&
但如果函数定义是bool fibon_elem(int pos, int &elem){},那么如果需要声明该函数,必须是bool fibon_elem(int, int &),即是,声明的时候不能省略&

2.操作一个ref和操作这个ref所代表的对象没有任何区别

3.在定义ref的时候就需要给ref赋值,并且这个ref就永远代表它所指的对象。有点类似于java中的final static变量,必须在定义的时候赋值并且永不会被修改。

4.对于一个const的vector,vector[index]=n这句是错误的。好好理解!!

5.传递内置类型时,不要使用转址方式,转址机制主要用于转递class object

6.当调用一个函数时,会在内存中建立一块特殊区域,称为“程序堆栈”。这个区域提供了每个函数参数和该函数种所定义的对象的存储空间。一旦函数完成,这块内存就会释放掉。

7.默认情况下,由heap分配而来的对象,皆未经初始化
new Type
new Type(initial_value)
new Type[length]
delete point
delete [] point

8.不论以point或reference形式将函数的局部变量返回,都不正确。
by me 我自己测试,无论是以point或reference返回局部变量,甚至直接返回局部变量,都是可以的,不会有语法错误,但是会有编译警告。
但如果使用point时,就会出现意外的情况,因为局部变量的内存可能已经被释放了!!!
但如果使用reference时,是正常的,不知道是不是测试问题???

9.默认值只能够制定一次,可以在函数声明处,也可以在函数定义处,但不能够在两个地方都指定。为了可见性,一般把默认值放在函数声明处。
by me 我自己测试,默认值不能在两个地方都指定,这个是对的,如果都指定的话,编译错误。
但默认值函数如果在函数声明处指定的话,没什么问题,调用该函数时,可以传递参数也可以不传递参数。
但默认值函数如果在函数定义处指定的话,调用该函数时,必须要传递参数。如果不传递则编译报错。

10.如果一个函数返回的是const对象,那么这个对象不能赋值给非const对象

11.inline即可放在h文件也可以放在cpp文件中或者同时存在h文件和cpp文件中,都不会报错。

12.关于重载
下面代码是合法的:
void demoOverload(string s)
{
}

void demoOverload(string& s)
{
}

void demoOverload(const string& s)
{
}

void demoOverload(string* s)
{
}

void demoOverload(const string* s)
{
}
下面代码是非法的:
void demoOverload(string s)
{
}

void demoOverload(const string s)
{
}
即是说,用const修改point或者reference可以是不同的函数重载,但如果const直接修饰对象,不是函数重载。

13.模板函数调用的时候,并不需要制定类型。这个和泛型不同。

14.头文件中的变量声明???

原文地址:https://www.cnblogs.com/tianlanliao/p/4023297.html