zoukankan      html  css  js  c++  java
  • C++语法细节笔记


    1、数据类型转换

    • 当赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
    • 把负数转换成无符号数类似于直接给无符号数赋一个负值,结果等于这个负数加上无符号数后的模。
    • 不能混用带符号类型和无符号类型

    2、指针与引用

    • 引用本身不是对象,但指针是对象,故指针不能指向一个引用, 存在对指针的引用。

    • 引用必须被初始化,并且引用类型的初始值必须是一个对象。

    • 常量引用可以绑定到字面值常量,如:

       const int &r=0;        //合法  
       int &r=0;              //非法
    

    3、const限定符

    • 如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字。

    • 对于const变量的引用,只能使用常量引用,即不能通过引用来改变常量(p54)。

    • 顶层const表示指针本身是个常量,底层const则表示指针所指向的对象是一个常量(p57),所谓顶层const,就是经过const修饰后变量保持不变:

       const int a=40;     //a的值不再变化
       int *const p=&a;    //p始终指向a
       //也可以如下:
       int a=40;
       int *const p=&a;   
    

    所谓底层const,一般是修饰指针对象,经过修饰之后该指针必须指向对应的常量,即指向常量的指针:

       const int a=10;
       int b=50;
       const int *p1=&a;   //正确
       const int *p2=&b;   //错误,因为b是非常量
    
       const int *const p=&i;    //靠右的const是顶层const,靠左的是底层const。  
    
    • 对于存放常量对象的地址,只能使用底层const修饰的指针。

    • 在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,与指针所指的对象无关(p59):

       const int *p=nullptr;          //p是一个指向整型常量的指针
       constexpr int *q=nullptr;      //q是一个指向整数的常量指针  
    
    • 对于常量、常量指针、引用都必须要初始化,常量和常量指针不能被赋值。

    4、声明

      在声明语句中声明多个变量时需要用逗号将变量名隔开。

    5、变量默认初始化问题

      对于内置类型的变量,c++规定全局变量的默认初始值为0,局部变量不会被默认初始化,如果程序试图拷贝或输出未初始化的变量,将遇到一个未定义的奇异值,注意string类型并不属于内置类型变量,不论变量定义为全局变量还是局部变量都将会被默认初始化为空串(_p17)。

  • 相关阅读:
    算法时间测试
    HDU1164
    git 中 HEAD detached from 802e836
    mysql中的substring()截取字符函数
    git分支/标签操作
    git简介、基本命令和仓库操作
    markdown编辑器学习
    数据库的三范式
    switch语句能否作用在byte,long,string上
    Spring的优缺点
  • 原文地址:https://www.cnblogs.com/xipuhu/p/7456626.html
Copyright © 2011-2022 走看看