谈谈typedef char* PChar; const PChar p;的错误之处

2024-02-06 14:48

本文主要是介绍谈谈typedef char* PChar; const PChar p;的错误之处,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       我们之前讨论过const_iterator和const形式的iterator的区别, 直接引用过来, 代码如下:

#include <iostream>
#include <vector>
using namespace std;int main()
{vector<int> v(10);vector<int>::iterator it;for(it = v.begin(); it != v.end(); it++){*it = it - v.begin(); // 迭代器的解引用就像指针的解引用一样}vector<int>::const_iterator cit; // 指向常量的迭代器, cit本身可变, 但*cit不能变for(cit = v.begin(); cit != v.end(); cit++){cout << *cit << endl;}for(cit = v.begin(); cit != v.end(); cit++){//*cit = 0; // error, const_iterator这种类型的迭代器指向的值是不可以更改的}vector<int>::iterator const xit; // error, const iterator自身不能改变, 所以必须对xit进行初始化const vector<int>::iterator yit; // error, 同上return 0;
}


       下面, 我们看一个简单的例子:

#define PChar char*int main()
{const PChar p;return 0;
}
        结果发现, 上面的程序是没有问题的, 好, 我们继续修改一下(先说明一下, 如下程序有误):

#include <iostream>
using namespace std;int main()
{typedef char* PChar; const PChar p;return 0;
}
        这个就有问题了, 很多人以为第三个程序和第二个程序是等价的, 其实不是, 第三个程序并不能替换为: const char* p;  不能将typedef简单理解为一种替换。 我们看看第一个程序中的迭代器吧, 第一个程序中的vector<int>::iterator其实就完全类似于Pchar,  所以, const限定的仍然是p, 也就是说, 指针p是常指针, 这种指针的值是不能改变的, 因此, 在C++中, 这种指针必须初始化, 所以第三个程序是错误的。



这篇关于谈谈typedef char* PChar; const PChar p;的错误之处的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/684648

相关文章

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤