int const *p1 = &i; // 常量指针 int * const p2 = &k; // 指针常量 对于指针p1, const修饰的是*p1,即p1指向的空间的值不可改变,例如*p1 = 20;就是错误的用法;但是p1的值是可以改变的,例如p1 = &k;则没有任何问题。 对于指针p2, const修饰的是p2,即指针本身p2不可更改,而指针指向空间
declaring a member function as const is a promise not to modify the object of which the function is a member; static data members must be defined (exactly once) outside the class body; 5. Static in C A static variable inside a function keeps its value between invocations. eg: void foo(...
这验证了int * const p锁定的是指针p本身,使其不能再指向其他地址。 场景3:const同时修饰指针和其指向的内容 这是最严格的情况,指针本身和它指向的内容都不能被修改。 语法:const int * const p = &some_variable; 记忆口诀:星号(*)的两边都有const,指针和内容全锁定。 代码案例 4: #include <iostream> ...
C语言的const本质是"只读变量"而非真常量:在嵌入式系统中,const变量可能存储在可写的Flash区域通过指针强制转换仍可修改:*(int*)&size = 200链接时需要重定位地址,不属于编译期常量 此设计与C++分道扬镳:// C++合法而C语言非法constexpr int N = 1024;char cache[N];因为C++将constexpr视为编译器誓言,...
/* OK */int32_tfoo(void){return;}/* OK */staticconstchar*get_string(void){return"Hello world!\r\n";}/* Wrong */int32_tfoo(void){return;} 变量 使变量名全部小写,下划线_字符可选 /* OK */int32_t a;int32_t my_var;int32_t myvar;/* Wrong */int32_t A;int32_t myVar;...
struct定义了一个包含多个成员的新的数据类型 tag是结构体标签 member-list是标准的变量定义,e.g.int i; variable-list结构变量,可以指定一个或多个 后三个至少出现两个 声明: struct tag{ member-list member-list ... }variable-list; 结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针 如...
可以被修改:除非被const修饰,左值通常是可以被赋值的。 既可出现在等式左侧,也可出现在右侧:左值可以被赋值(左侧)或读取其值(右侧)。 例如: int x = 5; // x 是左值,5 是右值 x = 10; // x 出现在等式左侧,作为左值被赋值 int y = x; // x 出现在等式右侧,作为右值提供值 ...
自动变动的普通变量只要有个类型名和符合语法的变量名称就能登场。申请身份证的过程完全不同。宏定义直接给固定座位证,const成员需要系统给开通固定储蓄账户,枚举家族自己占单独户口簿,字面常量更在内存流动售货机里存取应用。全局变量安家在内存资料馆专用存储间,从编译阶段便始终待在自己档案格里。每个函数里诞生的...
static_cast 任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。 const_cast const_cast只能改变运算对象的底层const。 对于常量对象转换成非常量对象的行为,一般称为“去掉const性质”。一旦去掉某个对象的const属性,编译器就不再阻止我们对该对象进行写操作了。如果对象本身是一个常量,再使用cons...
CXX.ID_VIS.GLOBAL_VARIABLE.STATIC 静态全局变量的可见范围太宽 4 False 2020.1 之前 CXX.INT_TO_FLOAT.CONV 在算术运算中使用隐式转换 4 False 2021.2 CXX.LOGICAL_OP.INT_OPERAND 潜在的逻辑错误:整型表达式不应直接用作逻辑运算符操作数。应改为使用 布尔表达式。 4 False 2021.1 CXX.LOGICAL_OP.NON_BOOL...