zoukankan      html  css  js  c++  java
  • c++学习笔记(5)

    1.两个相邻的仅由空格,制表符或者换行符分开的字符串字面值,可连接成一个新的字符串
    cout<<"a multi-line "
    "string literal"
    "using concat"
    <<std::endl;

    2.如果声明有初始化公式,那么它可以当作是定义,即使声明标记为extern
    extern double pi=3.14 //definition
    只有当extern声明位于函数外部时,才可以含有初始化式

    3.const必须在定义的时候初始化,这点和java不太一样,java的final可以在构造函数中初始化
    private:
    const int _conv=2;
    上面代码报错,提示: 只有静态常量整型数据成员才可以在类中初始化
    即类成员只有const static时才可以在定义的初始化!!!

    4.在全局作用域里定义非const变量时,它在整个程序中都可以使用。
    在全局作用域里定义const变量时,它只在定义的文件中可以使用,其他文件不能使用。
    通过指定const变量为extern,就可以在整个程序中访问该const对象。
    而声明一个外部定义好的const对象时,在声明中也必须带上const关键字,否则报错。
    extert const int counter=100; //defines in file_1.cc
    extert const int counter; //declare in file_2.cc
    for(int i=0;i<counter;i++) ...

    5.定义全局变量时,定义代码需要写在.cc(.cpp)文件中,不能写在.h文件中
    而extern一个变量时,extern可以放在.h文件中,也可以放在.cc(.cpp)文件中。还可以放在方法内部。
    而定义一个const全局变量时,就可以放在.h文件中。
    当要使用一个全局变量时,只需要声明就可以, 不需要管这个全局变量定义在哪个文件中,不需要include这个全局变量所在的类。只要保证全局变量有定义就好。

    6.引用就是对象的另一个名字。
    引用是一个复合类型,复合类型是指用其他类型定义的类型。
    引用必须用与该引用同类型的对象初始化。
    初始化是指明引用指向哪个对象的唯一方法。
    const引用是指向const对象的引用
    非const引用只能绑定到与该引用同类型的对象上,
    const引用则可以绑定到不同但相关的类型的对象或者绑定到右值。
    const引用可以绑定到非const对象

    int &refVal=10; //error
    const int &refVal=42; //ok

    int val1=10;
    int &refVal1_1=val1;
    int &refVal1_2=refVal1_1+1; //error

    const int val2=10;
    const int &refVal2_1=val2;
    const int &refVal2_2=refVal2_1+1; //ok
    int &refVal2_3=val2; //error

    int val4=1.11;
    const int &refVal4_1=val4;

    double val3=10;
    const int &refVal3_1=val3; //把一个int refer绑定到一个double值上
    //上面一句在编译器中相当于下面两句代码:
    //int temp=val3;
    //const int &refVal3_1=temp;

    7.头文件的类定义是带分号的

    8.一般不能把类成员的初始化作为其定义的一部分,
    当定义数据成员时,只能指定该数据成员的名字和类型。
    类不是在类定义里定义数据成员时初始化数据成员,而且通过构造函数的特殊成员函数控制初始化。

    9.struct和class关键字定义类的唯一区别在于默认访问级别。默认情况下,struct的成员为public,class的成员为private

    10.头文件用于声明而不是用于定义,因为头文件包含在多个源文件中,所有不应该含有变量或函数的定义!!!好好理解。
    对于头文件不应该含有定义这一规则,有三个例外,头文件可以定义类,值在编译时就已经知道的const对象和inline函数。
    在头文件中定义这些实体,是因为编译器需要它们的定义(不只是声明)来产生代码。

    11.c++支持所谓的分别编译,这点和java很大不同,java中定义一个类,就是指类的实现。但c++中,类是分两部分,一个接口和一个实现。
    当定义一个,是定义类的接口,这个接口是定义在头文件中。而类的实现则可以在任何一个文件中实现。

    12.当我们在头文件中定义了const变量后,每个包含该头文件的源文件都了自己的const变量。其名称和值都一样。

    13.如果一个头文件A中定义了一个const变量,再有头文件B include了A,还有头文件C include A和B 则编译报错,提示"找到一个或多个多重定义的符号"

    14.一些const对象定义在头文件中????没搞懂!!!

  • 相关阅读:
    解决Oracle 11g 或 ODAC 11.2 多客户端版本的乱码问题
    C#.ToString()格式大全
    太阳的眼泪
    oracle database link 12154 tns 无法识别错误的解决方案
    List<T>泛型的Find 和 Where 用法范例
    chrome 下载工具支持
    解决,启动office2007时总出现“正在配置Microsoft Office Professional Plus 2007”的字样
    macOS M1 下pip install安装.whl报错“is not a supported wheel on this platform.
    Mail.Ru Cup 2018 Round 3 B. Divide Candies (数论)
    202120221 BUCT ACM集训队每周程序设计竞赛(8) 问题D :一月忘干净
  • 原文地址:https://www.cnblogs.com/tianlanliao/p/4067084.html
Copyright © 2011-2022 走看看