看effective c++第二版推荐使用const,少用define。今天才发现发现这远远不够。

#define定义的常量在预处理替换,debug的时候无法打印宏的,这种常量设置是有缺陷的, const定义常量作用在编译时期,就是说编译器帮你检查有没有对const做修改,那么怎么实现一个运行时常量,目前c++中还没有提供改语法。所以const只是个协议。库提供者和使用者之间的协议,开发者和编译器的协议。所以有了const_static可以消除const的协议

开发者和编译器的协议:

const对象的内容,在运行时起是可以修改的。通过这个协议,编译器可以发现你代码中的一些隐形错误,就是让编译器来帮你找错

库提供者和使用者之间的协议

如果一个函数的参数是const类型的指针(const char *),那么表示它不会释放该指针的内容,为了防止内存泄漏,需要你自己管理指针的释放,

如果一个函数的参数不是const类型的指针( char *),那么表示该参数可能作为输出,可能修改内容,这个时候对传入的值要做备份,传出的值复制到别的数组中。内存的管理要仔细看函数说明

int PyArg_ParseTuple(PyObject *args, const char *format, ...)  该方法用来读取python对象的值,当args销毁的的时候也会把读取的值销毁。所以读取后马上备份

c++中的const关键字的理解的更多相关文章

  1. C++中的const关键字

    http://blog.csdn.net/eric_jo/article/details/4138548 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方 ...

  2. C++ 类中的const关键字

    //类中的const关键字 #include<iostream> using namespace std; class Point{ public: //这个const关键字本质上修饰的是 ...

  3. typescript 中的 infer 关键字的理解

    infer 这个关键字,整理记录一下,避免后面忘记了.有点难以理解呢. infer infer 是在 typescript 2.8中新增的关键字. infer 可以在 extends 条件类型的字句中 ...

  4. c++中的 const 关键字

    知识回顾:C语言中 const const 修饰的变量是 只读的,本质上还是变量:(只读变量:可以通过指针修改只读变量中的值) const 修饰的局部变量在栈上分配空间: const 修饰的全局变量在 ...

  5. java中对final关键字的理解以及使用场景

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.

  6. C++中的const关键字的用法

    1.const用于修饰普通变量,表示常量,不建议修改,某种程度上不允许修改(其实也是可以修改的) 指针常量 :指针(指向的变量的值)自身是一个常量,说明不能改变自身的指向  int* const p= ...

  7. C++中的const关键字学习笔记

    一.const引用 1. 例子一 #include <iostream> using namespace std; class sp { public: sp() {cout<< ...

  8. C++中const关键字的使用总结

    C++中使用const关键字来修饰常量,下面从两个方面总结:变量和成员函数. 变量:const可以修饰普通变量.指针(数组)和结构体. 1.const修饰普通变量是最简单的情形.这样的用法多为在程序中 ...

  9. c++ --> const关键字总结

    const关键字总结 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性.const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变 ...

随机推荐

  1. CSS3响应式侧边菜单

    在线演示 本地下载

  2. mac工作软件推荐-iterm + zsh + tmux

    原文链接: http://ju.outofmemory.cn/entry/57244 tmux安装https://blog.csdn.net/nmgzywd/article/details/50915 ...

  3. static_cast, dynamic_cast, const_cast 三种类型转化的区别

    强制转化四种类型可能很多人都常常忽略就象我一样,但是有时还是比较有用的.不了解的建议看看,一些机制我也不是十分了解,只是将一些用法写出来让大家看看.                           ...

  4. Codeforces 478D Red-Green Towers:dp

    题目链接:http://codeforces.com/problemset/problem/478/D 题意: 给你r个红方块和g个绿方块,让你用这些方块堆一个塔. 最高层有1个方块,每往下一层块数+ ...

  5. ajax如何处理返回的数据格式是xml的情况

    <!DOCTYPE html> <html> <head> <title>用户注册</title> <meta charset=&qu ...

  6. invalid constant type: 18

    javassist 3.18以下的版本不支持在JDK1.8下运行

  7. Linux vi/vim使用方法

    vi/vim 基本使用方法 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令. 1.vi的基本概念 基本上vi ...

  8. 如何理解Box-sizing模型?

    CSS3 box-sizing 属性 http://www.w3school.com.cn/tiy/t.asp?f=css3_box-sizing <style> div.containe ...

  9. hdu5606 tree (并查集)

    tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  10. 【二叉树的递归】03判断二叉树中有没有和为给定值的路径【Path Sum】

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树和一个和,判断这个树 ...