首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ISO C++禁止比较指针和整数[-fpermissive] [c++]

ISO C++标准中禁止比较指针和整数的原因是为了避免潜在的错误和不确定性。指针和整数是不同的数据类型,它们的含义和操作方式也不同。在C++中,指针表示内存地址,而整数表示数值。因此,将指针与整数进行比较可能导致意义不明确的结果。

禁止比较指针和整数的规则有助于提高代码的可靠性和可移植性。如果允许比较指针和整数,可能会导致以下问题:

  1. 不确定的结果:由于指针和整数的内部表示方式不同,比较操作可能会产生不确定的结果。这可能导致代码在不同的编译器或平台上表现不一致。
  2. 潜在的错误:比较指针和整数可能隐藏一些潜在的错误,例如指针溢出、内存越界等。禁止这种比较可以帮助开发人员更好地发现和修复此类问题。

为了避免比较指针和整数的错误,可以采取以下替代方案:

  1. 使用适当的指针比较操作:如果需要比较指针,应该使用适当的指针比较操作符,如相等性比较(==)或不等性比较(!=)。
  2. 使用指针和整数之间的转换:如果确实需要将指针与整数进行比较,可以使用显式的类型转换将指针转换为整数,然后进行比较。但是,这种做法需要谨慎使用,并且需要确保转换的正确性和安全性。

总结起来,ISO C++禁止比较指针和整数是为了提高代码的可靠性和可移植性,避免潜在的错误和不确定性。在编写C++代码时,应该遵循这一规则,并使用适当的操作符和转换来处理指针和整数之间的比较。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

c++对象特性this指针

对象特性: 成员变量成员函数分开存储 #include using namespace std; class wood { public: int num; //非静态成员变量...sizeof(d) << endl; //当有了非静态成员变量num是,占用内存:4 cout << sizeof(d) << endl; //当再添加一个func函数后,占内存不变,因为成员函数成员函数分开存储...d) << endl; //静态成员变量不是内对象,不算类对象内存大小 cout << sizeof(d) << endl; system("pause"); return 0; } this指针...this指针指向被调用的成员函数所属的对象 this指针是隐含每一个非静态成员函数类的指针 this指针无需定义可直接使用 用途: 1.当形参成员变量相同时,可用this进行区分 2.在类的非静态成员中返回对象本身...NUM){} wood& addNum(wood &w1) { this->num += w1.num; //num不为共享,一个是对象w1的num,一个是w2的num //this指向w2的指针

24510
  • 详解c++指针指针指针的引用

    展示一下使用指针指针指针的引用修改传递给方法的指针,以便更好的使用它。...(这里说的指针指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针指针的值传递。...如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的值。...输出的是两个2 使用指针指针 展示一下使用指针指针做为参数 void func(int **p) { *p = &m_value; // 也可以根据你的需求分配内存 *p...我们看一下 func(int **p)这个方法 p:  是一个指针指针,在这里我们不会去对它做修改,否则会丢失这个指针指向的指针地址 *p:  是被指向的指针,是一个地址。

    1.3K60

    【小白学习C++ 教程】七、在C++指针声明指针相关概念

    @Author:Runsen C++ 指针学习起来有点难,但是很重要。一些 C++ 程序使用指针更容易执行,另外其他 C++ 程序,例如动态内存分配,没有指针就无法执行。...// pointer to a float char *ch // pointer to character 所有指针的值的实际数据类型,无论是整数、浮点数、字符还是其他类型,都是相同的,...指针的概念 指针有很多但很简单的概念,它们对 C++ 编程非常重要。以下是 C++ 程序员应该清楚的几个重要的指针概念 - 指针 说明 空指针 C++ 支持空指针,它是在几个标准库中定义的零值常量。...将指针传递给函数 通过引用或通过地址传递参数都允许被调用函数在调用函数中更改传递的参数。 从函数返回指针 C++ 允许函数返回指向局部变量、静态变量动态分配的内存的指针。...有四种算术运算符可用于指针:++、--、+-。 “指针++”指针--”表示指针所指地址的下一个或前一个数据的地址。

    40620

    c++指针引用的区别

    目录 前言: 1、引用概念上是定义一个变量的别名,而指针是存储一个变量的地址。 2、引用在定义时必须要初始化,但是指针没有要求。...3、引用在初始化时引用一个实体后,就不能再引用其他实体,因为其本质是一个指针常量,无法改变指向。而指针可以在任何时候指向任何一个同类型实体。 4、没有NULL引用,但有NULL指针。...6、引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小。 7、有多级指针,但是没有多级引用。 8、访问实体方式不同,指针需要显示解引用,引用则由编译器自己处理。...9、引用比指针使用起来相对安全。 ---- 前言: 指针引用区别经常在面试中出现, 下面总结出以下区别 1、引用概念上是定义一个变量的别名,而指针是存储一个变量的地址。...6、引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小。 7、有多级指针,但是没有多级引用。 8、访问实体方式不同,指针需要显示解引用,引用则由编译器自己处理。

    53330

    C++: 21---引用指针

    如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。...(7)”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小; (8)指针引用的自增(++)运算意义不一样; (9)如果返回动态内存分配的对象或者内存,必须使用指针...,引用可能引起内存泄漏; 指针引用作为函数参数进行传递时的区别 (1)指针作为参数进行传递: #include #include using namespace...如果是我,我更喜欢选择引用,因为免去了指针判空(我比较懒),最主要是还是省空间,因为如果参数比较多,传指针,相当于要给当前的函数入口地址分配栈空间的时候,你的指针参数要分配8字节空间,这样重复调用此函数可能会产生大量内存碎片...(实际上内存碎片没有那么可怕,对于频繁申请和释放内存的操作我们就必须要重视内存碎片,解决办法就是我们可以使用内存池来来分配对象,内存池我将会在C++进阶的另外一个专题里说),而引用不需要额外分配空间,它只是相当于一个别名而已

    80220

    C++ 指针句柄的区别

    指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址,指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。...句柄实际上是一种指向某种资源的指针,或者说是一种指向指针指针。...在windows系统中的内存管理一般会将当前处于空闲状态的对象的内存释放掉,当需要访问的时候再重新提交分配物理内存,从而导致对象的物理地址是变化的, 这样就不允许系统直接通过指针来访问(物理地址不断变化...所以windows 提供了专门设计了句柄为了解决指针指向的对象的内存地址不断变化的,由句柄来指向当前对象的指针。...系统专门为各种应用程序腾出了一定的内存地址(句柄)专门用来记录这些变化的地址(这些内存地址就是指向指针指针),这些内存地址本身是一直不变化的。

    2.5K30

    C++ 指针引用的区别

    指针是C系语言的一大特色,也在很大程度上体现着C/C++的精髓,一个数据对象的内存地址称为该数据对象的指针。...引用是C++对C语言的一个补充,它的作用是为一个变量起一个别名。...这个问题上面的其实是对应的,既然指针在定义的时候可以为空,但是一个为空的指针对实现一个功能是没有用的,为了代码的鲁棒性,我们必须时刻考虑指针为空的情况,这在指针作为函数的参数时尤为常见。...由于引用的声明初始化总是在一起的,所以不可能让一个对象的引用指向另一个,这完全没有道理,假设a的引用是c,那么在执行int &c=b;就重定义了,如果执行c = b;,那么只是把b的值赋值给c,也就是...cout<<a<<endl; c = b; p = &b; cout<<c<<endl; cout<<a<<endl; (4)应用区别: 以上的特性决定了指针引用的一些应用上的区别

    98180

    C++ 中 extern 数组指针

    在一次使用 extern 声明全局变量的过程中,因为数组指针的混用引发了错误。 我们知道,C++ 中使用 extern 来声明在其他(未使用 include 包含的)文件中的全局变量。...关于这段话的理解,我觉得引入编译知识比较好理解,数组名是一个符号,枚举符号一样,有其自身的值,数组名的值就是数组的首地址。在编译的过程中,这些符号常亮会被替换为地址符号。...而指针是一个普通的变量,变量的值存放的是数组的地址。虽然数组名指针都可以进行元素访问,但是其本质是有很大区别的!...这里问题就出现了:由于在这个文件中声明的 a 是一个指针变量而不是数组,链接器的行为实际上是把指针 a 自身的地址定位到了另一个 .c 文件中定义的数组首地址之上,而不是我们所希望的把数组的首地址赋予指针... a(这很容易理解:指针变量也需要占用空间,如果说把数组的首地址赋给了指针 a,那么指针 a 本身在哪里存放呢?)。

    43100

    C++】This指针复制构造函数

    this指针 在每个成员函数中,都包含一个特殊的指针。 这个指针的名字是固定的,就是this指针。 this指针是指向类对象的指针,它的值是当前被调用的所在对象的地址!...this指针是指向本类对象的指针,它作为参数传递给成员函数 this指针是隐式使用的。由编译器自动实现,我们不必人为的在形参中添加this指针。...因为this表示这个对象的指针,所以*this就表示这个对象了 (*this).调用成员变量/函数this->调用成员变量/函数,是一样的效果!...注意给*this添加括号,因为.运算符的优先级比较高 复制构造函数 复制构造函数普通构造函数有一些相似处的,也没有返回值,类名作为函数名!...time);//第一次调用复制构造函数 func(time);//第二次调用复制构造函数 复制给func中的形参time CTime time3 = func1(time);//第三次第四次调用复制构造函数

    82920

    c++】类对象(二)this指针

    这里就与隐含的this指针有关了 this指针是面向对象编程语言中的一个特殊指针,它指向调用成员函数的那个对象。通过this指针,成员函数可以访问调用它的那个对象的成员变量成员函数。...,不需要用户传递 this指针的类型:类类型* const,(Date* const this)即成员函数中,不能给this指针赋值,但是this指向的内容可以被改变 特点: 在形参实参的位置,我们不能显示写出来...栈用于存储局部变量函数调用的上下文 const char* p = "abcdefg"; 这里p是一个指针,指向一个字符串常量。...而指针p本身(即存储字符串地址的变量)作为局部变量,存储在栈上 i(取决于编译器优化)j存储在栈上。 字符串常量"abcdefg"存储在常量区。 指针p(存储字符串常量的地址)存储在栈上。...后续给大家带来析构函数构造函数有关内容!

    9910

    C++对象模型this指针详解

    这篇文章主要介绍了详解C++对象模型this指针,是C++入门学习中的基础知识,需要的朋友可以参考下,希望能够给你带来帮助对象模型成员变量成员函数分开存储一、只有非静态成员变量才属于类的对象上空对象占用字节为...this 指针指向被调用成员函数所属的对象特点:1. this指针是隐含每一个非静态成员函数内的一种指针2.this 指针不需要定义,直接使用即可。...用途:1.当形参成员变量同名时,可用this指针来区分2.在类的非静态成员变量中返回对象本身,可使用return *this一、class Person{public:Person(int age)/.../变量{//this指针指向的是被调用成员函数的所属对象//即 p1, 所以可以解决变量的名称冲突this->age = age;//前一个为成员变量,后一个age为形参}int age;};void...二、class Person{public:Person(int age){//this指针指向的是被调用成员函数的所属对象//即 p1, 所以可以解决变量的名称冲突this->age = age;}

    23600

    C++指针引用及区别

    1.变量 首先最重要的,variable的定义,当你申明一个变量的时候,计算机会将指定的一块内存空间变量名进行绑定;这个定义很简单,但其实很抽象,例如:int x = 5; 这是一句最简单的变量赋值语句了...2.指针 指针的特殊之处在于:指针变量相对应的内存空间存储的值恰好是某个内存地址。这也是指针变量区别去其他变量的特征之一。...指针内存空间的表示如下: image.png 3.引用 引用(reference)在C++中也是经常被用到,尤其是在作为函数参数的时候,需要在函数内部修改更新函数外部的值的时候。...例如引用的定义如下: int x = 5; int &y = x; 4.指针引用的区别总结 指针有自己的一块空间,而引用只是一个别名; 使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小...但是没有const引用; 指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变; 指针可以有多级指针(**p),而引用至于一级; 指针引用使用++运算符的意义不一样; 如果返回动态内存分配的对象或者内存

    78910

    C++函数指针std::function对象

    C++函数指针std::function对象 这篇博文中通过实现对String字符串大小写转换为列来说明C++中函数指针std::function对象的使用。...我们在博文《C++实现一个简单的String类》中的自定义的String类为基础,再添加两个成员函数用于将字符串全部转为大写(toUpperCase)全部转为小写(toLowerCase)。...下面我们分别使用函数指针的方式C++ 11中的std::function对象进行实现。本文不对std::function的优点进行介绍,这是以一个简单示例进行入门介绍。...函数指针 头文件: 头文件实现中我们使用了typedef定义了一个函数指针类型,当然我们也可以使用using关键字进行定义,两者类似。...注意我们定义的transform函数指针的返回值是int,函数参数也是int,这是因为cctype头文件中的std::toupperstd::tolower函数的签名也是这样的。

    2.6K30

    【小白学习C++ 教程】十、C++指针内存分配

    声明指针变量的一般语法是: int p, *ptr; //声明变量p指针变量ptr p = 4; //赋值4给变量p ptr = &p; //将p的地址分配给指针变量ptr 在内存中,这些声明将表示如下...当地址变量分配给指针变量时,它指向的变量如上图所示。 由于 ptr具有变量 p 的地址,*ptr 将给出变量 p 的值(指针变量 ptr 指向的变量)。 为什么需要 C++ 中的指针?...「C++ 中使用指针的动态内存分配:」 在堆部分分配内存发生在运行时,而不是在编译时,因此分配堆内存称为动态内存分配。 一般来说,C++不会在堆中分配一个内存,因为在使用指针时通常会遇到的复杂性。...如果有足够的内存可用,则new运算符初始化内存并将新分配初始化的内存的地址返回给指针变量。...int *ptr = new int[20]; // 上面的语句为int类型的20个整数连续动态分配内存,并返回指向序列的第一个元素指向“ptr”指针

    47730

    C++指针引用的区别

    C++中,指针引用经常用于函数的参数传递,然而,指针传递参数引用传递参数是有本质上的不同的: 指针传递参数本质上是 值传递的方式,它所传递的是一个地址值。...,而指针不是 (引用比指针多了类型检查) 这几天看重温了下《高质量C/C++编程指南》 《More Effective C++》对于里面的引用指针觉得写得很精辟,同时在网上也找了些别人写的总结,引用过来大家分享下...引用是操作受限了的指针(仅容许取内容操作)。 ★《高质量C/C++编程指南》6.6     引用是C++中的概念,初学者容易把引用指针混淆一起。...引用的主要功能是传递函数的参数返回值。C++语言中,函数的参数返回值的传递方式有三种:值传递、指针传递引用传递。     以下是“值传递”的示例程序。...另外,const既可以放到类型前又可以放到类型后面,放类型后比较容易理解: string const *t1; const string *t1; typedef string* pstring;string

    5K82
    领券