首页 > 其他分享 >快速解决 const 与 typedef 类型组合时 ,const修饰谁的问题

快速解决 const 与 typedef 类型组合时 ,const修饰谁的问题

时间:2023-08-13 20:11:50浏览次数:33  
标签:typedef const char cstr pstring 修饰 pointer

C++使用typedef 给复合类型定义别名时,与const结合会产生看似“令人困惑”的类型推定,例如

typedef char* pstring;
const pstring cstr=0;
const pstring *ps;

cstr到底是什么类型? 如果直接把pstring 展开成 char* ,就会认为 cstr是 const char * 类型,从而认为cstr是一个指向const char类型的指针。

但是实际上cstr是指向 char* 的const 即常量指针。

难以理解的原因在于我们用现代中文的书写方式思考。

实际上,pstring 是 a pointer to char, 那么const 自然先修饰(modifier) pointer, 故cstr是a const pointer to char,即指向char的const指针。

最后一个例子可以用同样方式展开, ps is a pointer to const pstring, 继续展开,得到ps is a pointer to const pointer to char。

英语把定语后置使得可以进行类似“递归”的表达,现代汉语常把定语前置,汉语文言文倒是有大量的定语后置表达方式。

标签:typedef,const,char,cstr,pstring,修饰,pointer
From: https://www.cnblogs.com/goto2091/p/17627178.html

相关文章

  • const readonly 区别
    readonly与const的区别,要使用const的理由是效率高。(1)、const是编译常量,readonly是运行常量(2)、const是修饰基础类型,readonly没有限制publicconstintCvalue=100;publicconststaticintCvalue=100; //编译异常readonly是运行是常量,第一次复制后不可改变。"不可改......
  • 不能从const char *转换为LPCWSTR
    在字符串的前面添加一个大写L。这样可以实现将字符串转换为宽字符集。参考:https://jingyan.baidu.com/article/fec7a1e5f935211190b4e7e8.html......
  • 有关成员函数const修饰,对传入的成员属性影响以及返回指针引用的bug问题
    boolcontains(_T&data,bn_ptrt)const 此时传入的成员参数是带有const属性的,但是data是不带const的,通过影响成员参数访问权限,而达到不能修改的目的;BinarySearchTree<_T>&BinarySearchTree<_T>::operator=(constbst_refbst){ if(this!=&bst) { makeEmpty(); ......
  • 前端原型和原型链constructor
     目录前言导语运行结果总结 代码部分总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语前......
  • @Constraint注解,做特殊的入参校验
    //@Constraint是Java中的注解之一,用于标记自定义的约束注解。约束注解通常用于数据验证,用来限制字段的取值或格式,确保数据的合法性。@Constraint(validatedBy=FlagValidate.class) 第一步:先建一个@interfaceFlag的注解校验类,注解相关的校验类为FlagValidate.Class:im......
  • C++ | const的使用
    const基础用法用于声明一个不可再被修改的变量:constintnum=17;num=33; //Invalid,会报错用于指针首先,如果将一个指针用const声明为常量指针,那么这个指针的指向将不能被改变。但可以通过这个指针来修改被指向的对象:intdemo=17;int*constp=&demo; //......
  • c#的修饰符顺序以及修饰符说明,访问权限
    声明类的顺序:访问修饰符+类修饰符+class+类名例:publicclassClass1{}internalsealedclassClass2:Class1{}声明成员(方法或者参数)的顺序:访问修饰符+成员修饰符+值类型+类名例:publicoverrideintAA()publicnewintAA(intx)publicnewstaticinta=5;public......
  • 【JavaScript24】使用const声明常量
    前言const用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改。const声明常量const定义常量与使用let定义的变量相似:二者都是块级作用域都不能和它所在作用域内的其他变量或函数拥有相同的名称两者还有以下两点区别:const声明的常量必须初始化,......
  • Codeforces Round 890 (Div. 2) supported by Constructor Institute A-E1
    An=50非常小所以直接暴力枚举枚举每次把某个数以下的全部减完然后看一下是否上升就行 https://codeforces.com/contest/1856/submission/217275334  B题直接贪心前面优先放最小的最后一个放最大的 然后如果重复了就到前面去看能不能调整一下 https://codeforces.......
  • more and more construction problem,what should i do ?
    一些构造CF1464FShowingOff显然原图连边会形成若干内向基环树森林,所有在同一个环上的点\(S\)是相同的,注意到原图是二分图,因此所有环都是偶环。一个重要观察是,我们可以让所有环的长度都是2,因为总可以把长度\(>2\)的环拆成若干个二元环,而且在\(S_{i,j}\geq2\)的限制......