引用 记录

Posted pureyes-cyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了引用 记录相关的知识,希望对你有一定的参考价值。

int main()
{
//     int n = 1;
//     const int &m = n;
//     n = 2;
//     cout << "m: " << m << "   n: " << n << endl;
//  m: 2   n: 2

//    int &m = 42;          //error
//    const int &m = 42;    //ok

//     int s = 2;
//     int* p1 = &s;
//     const int* p = p1;
//     *p1 = 3;
//     cout << "p1: " << *p1 << "   p: " << *p << endl;
//  3   3

//    const int* p = 42;   //error;
//    int t = 40;
//    const int* p = t;    //error
//    int* p = t;          //error
//    int* p = 40;         //error

//    int n = 10;
//    int m = 20;
//    typedef int* pstring;
//
////    const int* p = &n;
////    p = &m;       //ok
////    *p = 100;     //error;
//
//    const pstring p = &n;       //相当于 const (char*) p   等价于(char*) const p
////    p = &m;       //error;
////    *p = 100;     //ok


    int i = 1;
    const int ci = i, &cr = ci;
//    ci = 2;         //error
    auto b = ci;    //b是一个整数(ci的顶层const特性被忽略掉了)
//    b = 2;          //ok
    auto c = cr;    //c是一个整数(cr是ci的别名,ci本身是一个顶层const)
//    c = 2;          //ok
    auto d = &i;    //d是一个整型指针
    auto e = &ci;   //e是一个指向整数常量的指针(对常量对象取址是一种底层const)
//    e = &i;         //ok
//    *e = i;         //error
//如果希望推断出的auto类型是个顶层const,需要明确指出
    const auto f = ci;  //ci的推演类型是int,f是const int
//还可以将引用类型设为auto,此时原来的初始化规则仍然适用
    auto &g = ci;   //ok;
//    g = 2;          //error;
//    auto &h = 32;   //error
    const auto &j = 32;//ok 可以将常量引用绑定字面值
//设置一个类型为auto引用时,初始值中的顶层常量属性仍然保留。和往常一样,如果我们给初始值绑定一个引用,这此时的常量就不是顶层常量了
    const int x = 1;
    auto & y = x;        //y的类型是cosnt int& 
    auto &const z = y;   //不存在const引用
    //引用不可能具有top-level cv-qualifier  修饰引用的const都是底层const

    system("pause");
    return 0;
}

 

以上是关于引用 记录的主要内容,如果未能解决你的问题,请参考以下文章

引用向量的部分片段?

片段对话框对活动的松散引用

记录C#常用的代码片段

discuz X3.1 源代码阅读,记录代码片段

提效小技巧——记录那些不常用的代码片段

未解决的对“片段”部分中的符号“”的引用