C++基础疑难点

本文探讨了C++中的常量指针和引用的概念。常量指针不可改变其指向的值,但能指向非常量对象,且必须初始化。而引用一旦绑定后不能更改,它不是对象,但可以被视为常量的别名。区分顶层const和底层const对于理解声明至关重要。C++11引入的constexpr允许编译器验证常量表达式,而auto和decltype则帮助简化类型推断,其中auto通常忽略顶层const。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指向常量的指针不能用于改变其所指对象的值,存放常量对象的地址,只能使用指向常量的指针。

允许令一个指向常量的指针指向一个非常量对象。指向常量的指针仅仅要求不能通过该指针改变对象的值。

指针是对象而引用不是,允许把指针定义为常量。常量指针必须初始化,完成初始化后值(指向的地址)不能改变;将*放在const之前说明指针是一个常量。

从右向左阅读,弄清楚声明的含义。

指针是一个对象,同时可以指向另一个对象,顶层const表示指针本身是常量,底层const表示指针所指对象是一个常量。

  • 用于声明引用的const都是底层const 

常量表达式:值不会改变并且在编译过程就能得到计算结果的表达式。t

C++11标准允许将变量声明为constexpr类型由编译器验证变量的值是否是一个常量表达式。constexpr声明中允许定义一个指针,constexpr对指针有效,与指针所指的对象无关:

/*
 * p是一个指向常量的指针,而q是一个常量指针,constexpr把它所定义的对象置为顶层const
 */
const int *p = nullptr;
constexpr int *q = nullptr;
typedef char *pstring;
const pstring cstr = 0;  // cstr是指向char的常量指针
const pstring *ps;       // ps是指针,它的对象是指向char的常量指针

C++11中auto类型说明符让编译器替分析表达式所属的类型,auto定义的变量必须有初始值。auto一般忽视顶层const,保留底层const,通过明确指出方式保留auto类型的是一个顶层const,

const auto f = ci; 

decltype类型指示符:从表达式类型推断定义的变量类型,而不使用该表达式的值初始化变量。decltype

 

C++疑惑代码


char *const node_memory = arena_->allocate();
return new (node_memory) Node(key);            //类前面的(node_memory)作用是什么?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值