c++里面出现的关键字

来源:互联网 发布:淘宝定价策略 编辑:程序博客网 时间:2024/06/05 01:06

static
声明的函数只能在一个文件的内部使用,不能被外部调用,所以这样可以保证函数不予系统中的函数同名,以造成冲突。

inline(内联函数)

explict

防止函数中出现我们不想要的隐式转换
因为有时,隐式转化会将数据的值省略部分值。

const

首先我们应该了解:
定义函数时,后面加const意义
用const修饰的作用是为了增加代码的健壮性,不然程序随意修改我们不想被改变的值。

1.首先,我们应该了解const对象只能调用const成员函数。

2.const 对象的值不能被修改,在const函数中修改const成员变量的值也是错误的。

3.在const函数中调用非const成员函数也是语法错误。

4.任何不会修改数据成员的函数的都应该声明为const类型。如果编写const成员函数,不慎修改了数据成员,或者调用了其他非const成员函数,
编译器将指出错误,这无疑会提高代码的健壮性。

5.以下程序中,类stack的成员函数G
etCount仅用于计数,从逻辑上讲,GetCount应当为const函数。编译器将指出GetCount函数中的错误。

总结:const修饰符只是限制了其他函数能不能被其他函数直接调用:
const 函数
不能被非const函数直接调用
const成员变量
不能被函数进行修改
const函数能使用非const成员吗???

!!!const 成员变量必须初始化,如果不进行初始化,错误;
!!!并且初始化成员的时候尽量在类的外部进行初始化,并且必须在类的初始化参数列表中进行初始化。

#include <iostream>using namespace std;class A{   //const成员函数   public:          A();          void fun() const;   private:           int a;                // 非const成员变量       const int b ;//=1;    // const成员变量,可以在类内对c                             //onst成员变量进行初始化,但是是g++11的版本};     A::A():a(0),b(1) //初始化列表初始化,const类型初始化     {     }     void A::fun() const     {       a = 1;        ----------}

test.cpp:30:7: error: assignment of member ‘A::b’ in read-only object
b = 1;
^

#if 0     void A::fun()const     {       b ;//= 2;              }#endifint main(int argc,char *argv[]){  A q;  return 0;}

imcomplete and complete

这是因为,在C++中,类型有Complete type和Incomplete type之分,对于Complete type, 它的大小在编译时是可以确定的,而对于Incomplete type, 它的大小在编译时是不能确定的。所以,上面的代码中,如果C是Incomplete type的话,sizeof就会在编译时报错,从而达到了我们检查C是否是Complete type的目的。
那么,如何来区分Complete type和Incomplete type呢?msdn中是这样定义Incomplete type的:
(1)A structure type whose members you have not yet specified.(成员不确定的结构类型,包括struct和class)
(2)A union type whose members you have not yet specified.(成员不确定的联合类型)
(3)An array type whose dimension you have not yet specified.(没指定大小的数组)

除了上面三类,其它的应该都属于Complte type.

error: no matching function for call to XXX

函数匹配不符合

原创粉丝点击