引用 记录
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; }
以上是关于引用 记录的主要内容,如果未能解决你的问题,请参考以下文章