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

重新定义C++关键字是否合法?

重新定义C++关键字是不合法的。

C++关键字是由编程语言规范定义的,具有特殊含义和用途的标识符。这些关键字在编译器中被预定义,用于表示语言的语法结构和控制流程。重新定义关键字会导致编译器无法正确解析代码,从而引发编译错误。

C++的关键字包括但不限于:auto、break、case、char、class、const、continue、default、delete、do、double、else、enum、explicit、extern、float、for、friend、goto、if、inline、int、long、mutable、namespace、new、operator、private、protected、public、register、return、short、signed、sizeof、static、struct、switch、template、this、throw、try、typedef、typeid、typename、union、unsigned、using、virtual、void、volatile、while等。

如果需要使用与关键字相同的标识符作为变量名或函数名,可以在标识符前面加上下划线或其他合法字符来避免冲突。但是这样做可能会导致代码可读性降低,不推荐使用。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

C++:47---绝不重新定义继承而来的缺省参数值

现在我们定义下面的代码,它们都被声明为pinter-to-Shpae类型,因此它们不论它们指向什么,静态类型都是Shape*: Shape* ps; //静态类型为Shape...见下面的代码: 我们知道virtual函数是动态绑定的,pr的动态类型为Rectangle,所以调用的是Rectangle::draw() 但是virtual函数的缺省参数值是静态绑定的,在上面类的定义中...如果缺省参数值也是动态绑定,编译器就必须有某种办法在运行期为virtual函数决定适当的参数缺省值,这比目前实行的“在编译期决定”的机制更慢而且更复杂 三、不要重新定义继承而来的缺省参数值 通过二,我们知道...因此,我们不要重新定义继承而来的缺省参数值,因为这会在调用virtual函数时产生意想不到的效果(上面代码中,通过pc调用draw()就是一个例子) 四、针对于virtual函数的缺省参数值,给出的建议...non-virtual函数draw,其参数默认为Red,并且non-virtual函数不建议派生类隐藏,因此不论是基类还是派生类调用draw()函数,参数的默认值将永远是Red,达到了我们最终的目的 五、总结 绝对不要重新定义一个继承而来的缺省参数值

43340

C++C++ 语言对 C 语言的加强 ② ( 变量检测增强 - C++ 不允许重复定义变量 | struct 关键字增强 - struct 作用等同于 class )

一、变量检测增强 - C++ 不允许重复定义变量 在 早期的 C 语言 编译器版本 中 , 可以 重复 定义 多个 同名的 全局变量 , 编译器 会将 这些 同名的 全局变量 链接到 全局数据区 的 相同地址空间中...+ 语言中 , 不允许重复定义相同的变量 ; 在 C++ 代码中重复定义变量 , 会报错 ; 1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------...struct 关键字定义的结构体是一种新类型 , 而是将结构体当做了一组变量的集合 ; 在 C 语言中 , struct 关键字用于 定义普通的 结构体类型 , 这是定义了 固定大小内存块别名 , 此时还没有给...; C++ 中将 struct 定义的结构体 当做一个新类型 对待 ; C ++ 语言中 , struct 关键字 与 class 关键字 完成的功能相同 ; struct 中也可以加上 public..., protected , private 访问限定符 关键字 ; 在 C++ 代码中 , 使用如下代码 , 定义结构体 Student , 并使用 Student s1; 定义该类型变量 , 下面的代码是可执行的

16520

C++C++ 语言对 C 语言的加强 ① ( 实用性增强 - 变量任意位置定义 | register 关键字增强 - 自动进行寄存器优化 )

) 会报错 , 如果使用 2000 年左右的 Microsoft Visual C++ 开发环境 , 就会报语法错误 ; 为了更好的兼容性 , 一般情况下都要将 C 语言的 变量 定义在 函数开始位置...; C++ 语言定义变量位置 : C++ 语言 在 C 语言 的基础上 , 增强了 " 实用性 " , 变量可以在 使用时 再定义 , 不需要在 函数 开始位置定义 ; 代码示例 : // 包含 C++...二、register 关键字增强 - 自动进行寄存器优化 ---- 在 C 语言中 , register 关键字 的作用是 告诉 编译器 , 将 使用 register 关键字 修饰的 变量 , 存储在...只能用于修饰 局部变量 , 但是在 C99 标准中 弃用了 register 关键字 ; 在 C++ 语言 , 也弃用了 register 关键字 , 但是 C++ 编译器 可以自动优化代码 , 不需要手动使用...C++ 语言中 可以获取 register 寄存器变量的地址 ; register 寄存器变量使用代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std

13220

那些陌生的C++关键字

那些陌生的C++关键字 学过程序语言的人相信对关键字并不陌生。偶然间翻起了《C++ Primer》这本书,书中列举了所有C++关键字。我认真核对了一下,竟然发现有若干个从未使用过的关键字。...C++使用typename的情况有两种: 第一种情况是在函数模板和类模板声明中。一般模板声明中,使用class关键字指定类型参数,后来C++支持使用typename代替class关键字。...::MyType * pvar;//定义指针 typedef MyClass::MyType MyType;//重新命名类型 这些使用方式并没有太大问题,问题可能出现在带有模板的代码中,例如: template...其实这些问题在目前的编译器中并不存在,使用VC6.0和VS2010测试发现,无论是否加上typename程序都不会出错。对该关键字的保留大概是为了兼容旧式编译器的代码。...至此,我们把那些陌生的C++关键字的“老底”摸了个遍,相信以后应该不会再碰到搞不清楚的C++关键字了,希望本文对你有所帮助!

91570

C++编程基础与高级编程

文章目录 C++基础教程 入门实例 编程实战 linux 下编译c++ 程序=算法+数据结构 C++存储类 数组 C++ 指针 C++ 引用 面向对象编程 static 关键字 C++ 继承 C++...C++是一个中级语言,c++是c语言的超集合,任何合法的C都是合法C++程序。 c++的文件扩展名,.cpp .cp .c C++ 中分号是结束符号,每个完整的句子都以;号结束。...您可以使用 extern 关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。...1.static是类的的关键字或修饰符。...在C++中,如果派生类定义了与其基类中定义的函数相同,则称函数重写。 C++虚函数是基类中的一个成员函数,您可以在派生类中重新定义它。 它声明使用virtual关键字

1.9K30

C与C++的升级关系

C++继承了所有的C特性 C++在C的基础上提供了更多的语法和特性 C++的设计目标是运行效率与开发效率的统一 升级1 C++ 更强调语言的实用性 所有变量都可以在需要使用时在定义 int c...升级2 register 关键字请求编译器将局部变量存储于寄存器中 在C++中依然支持register关键字 C++编译器有自己的优化方式 C语言中无法获取register变量的地址 C++中可以获取...register变量的地址 C++编译器发现程序中需要取register变量的地址时,register对变量的声明变的无效 升级3 在C语言中,重复定义多个同名的全局变量是合法的 C语言中多个同名的全局变量最终会被链接到全局数据区的同一地址空间上...  在C++中, 不允许定义多个同名的全局变量 升级4 struct 关键字加强 C语言中的struct定义了一组变量的集合 C语言中struct定义的标识符并不是一种新的类型 C++中的struct...用于定义一个全新的类型 升级5 C++中所有的标识符都必须显示的声明类型 C语言中的默认类型在C++中是不合法的 f(i){ printf("i = %d\n",i); } g(){ return

89750

C++中变量声明与定义的规则

声明与定义分离 Tips:变量能且仅能被定义一次,但是可以被多次声明。 为了支持分离式编译,C++定义和声明区分开。...extern 如果想声明一个变量而非定义它,就使用关键字extern并且不要显式地初始化变量: extern int i; // 声明i而非定义i extern int i = 1; //...静态全局变量(C++废弃,用匿名命名空间替代) Tips:对于全局变量,不管是否被static修饰,它的存储区域都是在静态存储区,生存期为整个源程序。...const对象,那么必须在变量的定义之前添加extern关键字: /* * 下面是合法的, main.cpp和foo.cpp中的const int对象是同一个 */ // foo.cpp extern...,通过constexpr关键字声明一个变量,我们可以让编译器来验证变量的值是否是一个常量表达式。

2.2K10

C++】const 关键字 与 #define 宏定义 对比 ( 相同点 - 都可定义常量和优化性能 | 不同点 - const 常量进行作用域检查和类型检查 )

一、const 关键字 与 #define 宏定义 相同点 在 C++ 中 , const 可以作为 替代 #define 宏定义 的手段 ; const 常量定义 : const int a = 10...; 宏定义 : #define a 10 1、相同点描述 const 关键字 与 #define 宏定义 相同点 : 二者都可以用于 定义常量 ; 常量的特点是 运行期间保持不变 ; 符合上述要求..., 就可以作为常量使用 , 使用这两种手段定义的常量 , 在运行时都无法进行修改 ; 二者都可以 对性能进行优化 : const 关键字 定义的 常量 , 在编译时分配内存 , 编译器对其进行优化...使用 宏定义 作为 数组的大小 , 编译会通过 ; 代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义...与 #define 宏定义 不同点 ---- 在 C++ 语言中 , const 关键字 与 #define 宏定义 不同点 : const 常量 是 编译器 在 编译阶段 进行处理 , 会提供 类型检查

21640

【专业技术】C++里面重要的几个关键字的用法

C++关键字:mutable、volatile、explicit以及__based mutable关键字 关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员我们知道一个对象的状态由该对象的非静态数据成员决定...volatile关键字 volatile是c/c++中一个鲜为人知的关键字,该关键字告诉编译器不要持有变量的临时拷贝,它可以适用于基础类型 如:int,char,long......也适用于C的结构和C...地址内容是volatile,所以每次循环之中它不断的被重新检查。把一个const volatile变量作为参数传递给函数是合法的。...,参考该关键字的应用可以看看STL源代码,其中大量使用了该关键字 __based关键字关键字主要用来解决一些和共享内存有关的问题,它允许指针被定义为从某一点开始算的32位偏移值,而不是内存种的绝对位置...上面的例子种的DEMOSTRUCT只是随便定义的一个结构,用来代表任意的结构.

79770

C++从入门到精通——nullptr

在C和C++中,可以使用NULL宏定义表示空指针。当使用NULL赋值给一个指针时,表示该指针不指向任何内存地址。 使用空指针可以用于以下情况: 初始化指针变量,避免野指针的问题。...在条件判断中判断指针是否为空。 作为函数的返回值,表示函数执行失败或者没有有效的返回值。 需要注意的是,访问空指针会导致程序崩溃或者产生未定义的行为,因此在使用指针之前,应该先判断指针是否为空。...在以前的C++标准中,常用的空指针常量是NULL,它通常被定义为整数0或者(void*)0。...nullptr是一个特殊的关键字,它的类型是std::nullptr_t,表示一个空指针常量。...如果一个指针没有合法的指向,我们基本都是按照如下方式对其进行初始化: void TestPtr() { int* p1 = NULL; int* p2 = 0; // …… } NULL实际是一个宏

12210

const 详解

但是c++在c的基础上新增加的几点优化也是很耀眼的,就const直接可以取代c中的#define以下几点很重要,学不好后果也也很严重。  ...,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。       ...   *p2i=100;                //合法    在好长一收段时间我被const困惑,看到const关键字C++程序员首先想到的可能是const常量,如果只知道用const...定义是常量,那么相当于把火药仅用于制作鞭炮。...企图修改数据成员m_num     Pop();     //编译错误,企图非const成员函数 return m_num;   }   const成员函数的声明看起来怪怪的:const关键字只能放在函数声明的尾部

97610

Java 基础语法(1)- 注释、标识符、关键字

关键字 概览 ?...详细 Java关键字类别 Java关键字 关键字含义 访问控制 private 一种访问控制方式:私用模式,访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量) protected 一种访问控制方式...对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 implements...表明一个类实现了给定的接口 interface 接口 native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 new 用来创建新实例对象 static...finally 无论是否捕捉到异常,最后都会执行的代码块 包相关 import 表明要访问指定的类或包 package 包 基本类型 boolean 基本数据类型之一,声明布尔类型的关键字 byte

38520

《P4语言规范》Header & Instances详解

首部类型的定义,可以类比C语言中定义一个结构体,header_type 关键字类比 struct 关键字,local_metadata_t 类比结构体的名字,fields 字段域中的字段类比结构体的成员...(注:后面的章节有提到,区别在于合法性和逆解析过程,应该是两个方面;这里的说法,应该指的是在进入Ingress过程之前) 包头实例会带有特定的独立标记,用于测试其是否合法;而metadata,一般都认为它合法...3.1 检验包头实例和元数据实例是否合法 数据包中的首部实例以及其字段域中的成员字段们可能会被检查是否合法的(valid)(是否有一个确切定义的值),合法性和逆解析过程是仅有的两个区分包头实例和元数据实例的方法...虽然流水线中一个匹配操作可能会检查首部实例(或者字段)是否合法,但是只有合法的首部字段才被允许进行匹配(当字段的值是为精确匹配或者三元匹配而指明的时候)。...比如上文提到的: inner_vlan_tag.vid 就是说引用实例 inner_vlan_tag 中的 vid 字段,这种做法和C++中引用类的成员做法一致。

1.3K80

C++学习总结1——几个基本概念

过了几天发现只在Visual Studio里面调试怎么也搞不定,只好硬着头皮,重新学习指针的用法。在看书和看别人写的博客后,感觉学到了许多新的东西,不光是关于指针,还有其他一些以前我不太清楚的内容。...,在前面加了“extern”关键字后才是声明。...对于内置类型和类类型,规则不同;对于函数内变量和函数外变量,定义规则也不同。 内置类型变量 内置类型指int,float,char和void等基本类型(在C++中,string不是内置类型)。...如果没有默认构造函数,则定义时必须提供显式的初始化式。因为C++中类会自动地增加一个默认构造函数,所以这种情况比较少见。 参考内容 1....《C++ Primer第4版》 2.Declare vs Define in C and C++

52620

C++】类的封装 ④ ( 访问控制权限 | struct 和 class 关键字定义类的区别 | 类的默认访问权限 | 类的默认继承方式 )

一、struct 和 class 关键字定义类的区别 1、struct 和 class 关键字作用 在 C++ 语言中 , 使用 struct 和 class 关键字 , 都可以 用于定义 类 , 这些被定义的类...和 class 关键字 定义的类 的 默认访问权限 不同 , 使用 struct 关键字 定义的类 , 成员的默认访问权限是 public , 可以在 类的内部 和 类的外部 访问 ; 使用 class...关键字 定义的类 , 成员的默认 继承方式是 public ; 使用 class 关键字 定义的类 , 成员的默认 继承方式是 private ; 在 C++ 语言中 , 子类 继承 父类 时 可以获取父类的所有...属性 和 行为 ; C++ 的 继承 可以通过使用冒号 : 和 访问修饰符 public / protected / private 来定义 ; 子类可以继承父类的 3 种方式 : 公有继承 public...... }; 4、struct 和 class 关键字 的 推荐用法 在实际开发中 , 推荐使用 class 关键字 定义 类 , 推荐使用 struct 关键字 定义 结构体 ;

18920

CFI技术新探索,struct_san今日登场

一、背景 C/C++开发的应用程序,长久以来存在内存破坏类的安全问题。当攻击者掌握了目标程序的漏洞后,就可以开发漏洞利用程序劫持目标程序的控制流。...当攻击者通过漏洞修改这个节点的跳转逻辑,如果没有可靠的合法性验证机制,那么攻击者最终可以完全控制目标机器。...前者是在间接调用前验证控制流,而后者是在函数返回时验证返回地址是否属于调用者。...,如果验证合法则继续运行下面的间接调用函数,否则抛出ud2。...例如在pipe_buf_release()函数的声明和定义处加关键字,加入关键字后会在调用pipe_buf_operations->release()前插入校验函函数__sanitizer_struct_guard

61740

Python 为什么没有 void 关键字

标题中的问题可以进一步分解成两个: 其它语言为什么要使用 void 关键字? Python 为什么不设计出 void 关键字?...C++ 为了兼容 C,所以才同时支持这两种语法。 当 void 用在函数前作修饰时,它表示该函数没有返回值。 在 C 语言中,若不声明返回类型,则f() 函数在编译后会返回整型的值。...至于返回值类型的用法,在我们定义出一个函数时,例如最简单的def func():pass ,为了让它的调用结果func() 是一个合法的对象,那它必须具有一个有效的类型(type)。...这样的形式,那它就变成了函数定义时的一种特例。与另一种特例函数相比,即异步函数asyc def func():... ,就可能引起混乱。...请往上翻,重新阅读本文…… 本文属于“Python为什么”系列(Python猫出品),该系列主要关注 Python 的语法、设计和发展等话题,以一个个“为什么”式的问题为切入点,试着展现 Python

84830
领券