const:

1 定义变量 ,如下写法都可以:

TYPE const ValueName = value;
                 const TYPE ValueName = value;

2 当作为全局变量并且在他文件也想使用时:(默认const具有局部性)

1.CPP  :extern const TYPE ValueName = value;定义

2.CPP:  extern const  TYPE ValueName; 外部声明

上面两个const 和TYPE可以颠倒。

3 指针使用const

如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
         如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

4 函数参数中返回值中用const

5 类与const:
    class A
    {
        …
        const int nValue;        //成员常量不能被修改
        …
        A(int x): nValue(x) { } ; //只能在初始化列表中赋值

void function()const; //常成员函数, 它不改变对象的成员变量.

//也不能调用类中任何非const成员函数。

}

1)修饰成员变量:表示成员常量,不能被修改,同时它只能在初始化列表中赋值。

2)const成员函数不被允许修改它所在对象的任何一个数据成员,函数中可以使用非const成员变量,但不能修改。 不能调用类中任何非const成员函数。(因为任何非const成员函数会有修改成员变量的企图。)const成员函数声明和定义const都不能少

3)const类对象、指针、引用:只能调用类的const成员函数,可以使用成员变量,但不能改变值。因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。

class A
{
public:
const int nValue; //成员常量不能被修改
int m_a; A(int x,int a): nValue(x) { m_a=a;} ; //只能在初始化列表中赋值 void func()const; //常成员函数, 它不改变对象的成员变量. //也不能调用类中任何非const成员函数。
}; void A::func() const
{
cout<<m_a<<endl;
cout<<nValue<<endl;
}
int main()
{
const A aa(,);
cout<<aa.m_a<<endl;
aa.func();
return ;
}

补充:const与宏区别:

#define PI 3.14159         //常量宏
const doulbe  Pi=3.14159;  //此时并未将Pi放入ROM中
              ......
double i=Pi;   //此时为Pi分配内存,以后不再分配!
double I=PI;  //编译期间进行宏替换,分配内存
double j=Pi;  //没有内存分配
double J=PI;  //再进行宏替换,又一次分配内存!

static:

class MyTestClass
{
public:
MyTestClass() : m_ciInt(), m_csStr("MyStr") // const成员变量,在ctor参数列表中初始化
{}
public:
const int m_ciInt;
const string m_csStr;
static int m_siInt;
static string m_ssStr;
const static int m_csiInt;
const static string m_cssStr; static void func();
};
int MyTestClass::m_siInt = ; // static成员变量,在外部定义
string MyTestClass::m_ssStr = "MyStr"; // static成员变量,在外部定义
const int MyTestClass::m_csiInt = ; // const static/static const成员变量,在外部定义
const string MyTestClass::m_cssStr = "MyStr"; // const static/static const成员变量,在外部定义 void MyTestClass::func()
{
cout<<m_siInt<<m_ssStr<<m_csiInt<<m_cssStr<<endl;
}
int main()
{
MyTestClass myclass;
myclass.func();
MyTestClass::func();
return ; }

一般这么初始化就可以了,高版本编译器支持类声明中 const static int m_csiInt=5;//常量声明式。

通常C++要求你对所使用的任何东西提供一个定义式,但如果是类的const static 且为整数类型(int,char,bool)
则可以“in_class初值设定”。只要后续使用中不取它们的地址,就可以这么声明后无需提供定义式。如果需要定义式,在类外:

const int MyTestClass::m_csiInt;//不可以再设初值。

注意:static成员变量外部定义不可以出现static关键字。

静态变量和静态函数存在的意义?

答:类中静态函数意义:(类外定义不能写static关键字)

1静态私有成员在类外不能被访问,可通过类的静态成员函数来访问;

2 当类的构造函数是私有的时,不像普通类那样实例化自己,只能通过静态成员函数来调用构造函数。(单例模式)

普通静态函数,静态变量作用:限定了只能在本文件中使用。

静态成员变量和静态成员函数都是为类所拥有,只有一份。静态变量保存在静态存储区。

inline:C++类中使用

三种内联函数形式:1 默认内联函数 2 显示定义内联函数 3 类外定义为内联函数

class Student
{
  private:
    int nID
int
nAge;
    float fScore;
  public:
    void setID(int nid){ nID = nid; }    //该成员函数默认自动为内联函数(隐式定义内联函数)
    inline void setAge(int nage) { nAge = nage; }   //显式定义内联函数
    void setScore(float fscore);         //类定义体内没有声明为内联函数;
}
inline void Student::setScore(float fscore){ fScore = fscore; } //类定义体外实现为内联函数;

由于内联函数是编译器在便宜阶段进行函数体展开的,所以,这就把类的内联函数的定义与实现都必须在声明类的那个头文件中,而不能放在实现类的那个cpp文件中;这一点与模板template<>的特性相似;

const ,static,inline的更多相关文章

  1. Effective C++ 第二版 1)const和inline 2)iostream

    条款1 尽量用const和inline而不用#define >"尽量用编译器而不用预处理" Ex. #define ASPECT_R 1.653    编译器永远不会看到AS ...

  2. Effective C++ 条款02:尽量以const,enum,inline替换 #define

    换一种说法就是宁可以编译器替换预处理器 举例 #define ASPECT_RATIO 1.653 记号ASPECT_RATIO也许从未被编译器看见:也许在编译起开始处理源码前它就被预处理器移走了,于 ...

  3. 条款一:尽量使用const、inline而不是#define

    #define ASPECT_RATIO 1.653 编译器会永远也看不到ASPECT_RATIO这个符号名,因为在源码进入编译器之前,它会被预处理程序去掉,于是ASPECT_RATIO不会加入到符号 ...

  4. Book. Effective C++ item2-尽量使用const, enum, inline替换#define

    ##常规变量 c++里面的#define后面的定义部分,是不算代码的一部分的.所以如果你使用#define: #define ASPECT_RATIO 1.653 你希望这个代号ASPECT RATI ...

  5. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  6. 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)

    李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...

  7. static inline

    今天看到了这样一段代码, static inline BOOL IsEmpty(id thing) { return thing == nil || [thing isEqual:[NSNull nu ...

  8. const, static and readonly

    const, static and readonly http://tutorials.csharp-online.net/const,_static_and_readonly Within a cl ...

  9. 类内const static(static const)成员变量初始化问题

    在查找const相关资料的过程中,又遇到了另外一个问题,就是C++类中const static(或者static const)成员变量应当如何初始化的问题. 查阅了许多资料,发现VC环境下,只允许co ...

随机推荐

  1. Asp.Net Web API 2第四课——HttpClient消息处理器

    Asp.Net Web API 导航   Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok/p/3432158.html Asp.Net Web A ...

  2. WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手册

    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 系列博文 <WinDbg 命令三部曲:(一)WinDbg 命令手册> <WinDb ...

  3. 那些年我们一起追过的Linux命令

    1. cd - 作用:返回上次的目录,类似于Windows的后退功能: 2. man ascii 作用:打印出八进制.十六进制和十进制的ASCII码表:(再也不用Google ASCII表啦) 3. ...

  4. LeadTools Android 入门教学——运行第一个Android Demo

    LeadTools 有很多Windows平台下的Demo,非常全面,但是目前开发手机应用的趋势也越来越明显,LeadTools也给大家提供了10个Android的Demo,这篇文章将会教你如何运行第一 ...

  5. Sql Server 调用DLL

    背景 在处理数据或者分析数据时,我们常常需要加入一定的逻辑,该些处理逻辑有些sql是可以支持,有些逻辑SQL则无能为力,在这种情况下,大多数人都会编写相关的程序来处理成自己想要的数据,但每次处理相同逻 ...

  6. Android Application 对象介绍

    What is Application Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application ...

  7. Java thread jargon

    In Java thread topic, the task to be executed and the thread to drive the task are two concepts shou ...

  8. Android 使用Fragment界面向下跳转并一级级返回

    http://www.cnblogs.com/_ymw/p/4227862.html 1.首先贴上项目结构图: 2.先添加一个接口文件BackHandledInterface.java,定义一个set ...

  9. C++与C#的时间转换

    1.C++中的时间:(1) time_t其实是一个64位的long int类型(2) time函数:函数简介: 函数名:  time     头文件:  time.h     函数原型:time_t ...

  10. Android开源源码推荐(一)

    1.Android-ViewPagerIndicator http://www.akaifa.com/code/86/android-viewpagerindicator 实现各种样式的滑动视图(Sc ...