• C++ 勘误


      列出一些可能会失误的地方   

    const string *  strp 是 指向不可变字符串的一个指针,

    string *const strp 是指向字符串,但该指针为不可变。

    const string* const p 是指向不可变字符串的不可变指针

    typedef string *  ms;

    const ms strp ;实际应该是string *const strp ;因为const描述的是string 指针类型.

    C++不允许定义长度为0 的数组变量,但可以调用new 动态的创建长度为0的数组;

    例如 :

    int i[0];// 不合法

    new  int[0];//OK

    虽然可以动态创建长度为0的数组,但是不允许对该数组进行解引用,因为它没有什么可用的值

    但可以进行比较操作,和加减,或者减去本身,结果为0值。

    测试C风格的字符串长度需要注意需要加1

    const char * cstr="leak";

    const size_t len=strlen(cstr)+1; //因为字符串最后''来作为结尾,而这个空字符占用1字节。

    char * c=new char[len];

    C++中操作符

    typeid

    sizeof

    new 

    delete 

    以上4个容易误解,以上4个不是函数,是C++的操作符。和* & 之类的是一个类别。

    安全释放内存空间

    例如:

    int *p =new int();

    delete p;

    p=0; //注意这里置空指针,防止悬垂指针导致的程序的不稳定性

    指向const 对象的指针可以指向非const对象

    但指向非const对象的指针不可以指向const对象

    函数传入数组时,并不会检查数组的长度,只会检查传入的参数是否为指针,指针类型是否匹配。

    如果函数的数组形参是引用形参的话,将会检查数组长度

    例如: fct(int (&narr) [10]) 引用必须带括号,因为下标操作符的优先级高于引用.

    函数指针声明时必须用()把变量名称括起来。(*fucRef)

    例如

    bool (*fucRef)(int arg);

    函数指针形参要求精确匹配,不存在转换

    对函数指针赋值时可以不用&符 (取地址)

    fucRef = fct;

    等价

    fucRef = &fct;

    调用函数指针时可以不用*符(解引用)

    fucRef(1);

    (*fucRef)(1);

    vector<string> v;

    v[0];   //这里会报runtime error;

    v.at(0);  //用at调用取值的话,会throw out_of_range Execption;

    在函数中访问全局同名变量,请用:: 作用域操作符来指定 例如 ::global

    访问被局部变量覆盖的类变量,用this->来明确指定

  • 相关阅读:
    网络爬虫基础练习
    词频统计预处理
    将博客搬至CSDN
    内核探测工具systemtap简介(转)
    常用汉字的Unicode码表
    随机生成登录时的验证码图片
    response中用outputstream输出中文问题
    ServletContext读取web应用中的资源文件
    ServletContext
    URL描述web资源访问流程
  • 原文地址:https://www.cnblogs.com/guopl/p/3466941.html
Copyright © 2020-2023  润新知