在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰。你能区分下面的吗?知道什么时候用吗?
栈:由编译器管理分配和回收,存放局部变量和函数参数。 堆:由程序员管理,需要⼿动 new malloc delete free 进⾏分配和回收,空间较⼤,但可能会出现内存泄漏和空闲 碎⽚的情况。 全局/静态存储区:分为初始化和未初始化两个相邻区域,存储初始化和未初始化的全局变量和静态变量。 常量存储区:存储常量,⼀般不允许修改。 代码区:存放程序的⼆进制代码。
这也是面试和笔试中经常会考到的问题,特别是static我面试了四家就考了两家,但是一般会放在前两题,属于特别基础的题目了。
static, const, let声明变量有什么区别? 就【求值-时间点】来讲, static与const都是【编译时】求值 let是【编译时】绑定,求值时间点取决于赋值语句右侧值的类型 【常量表达式】编译时求值 【普通表达式】运行时求值 就【赋值】来讲, static与const仅只接受【常量表达式】。 const不能引用一个static,但可引用另一个const。 let既可以接受【常量表达式】,也能够接受运行时求值的普通表达式。 就【内存管理】来讲, const - 其自身不占用任何内存空间。相反,
一、类静态成员(static) 先介绍一下什么是静态变量、静态函数 静态局部变量:存在域(全局数据区),作用域(块作用域) 静态全局变量:存在域(全局数据区),作用域(整个文件) 静态函数:存在域(全局数据区),作用域(整个文件) static int a=10;//全局静态变量 static void add();//静态函数 int main() { { static int b=10;//局部静态变量 } } 特点: 静态static修饰的变量、函数,只需要初始化一
例如若要在头文件内定义一个常量的(不变的)char *字符串,就必须写const两次
>**auto不能修饰全局变量** : auto 关键字不能修饰全局变量, 因为 ***auto 修饰的变量存储在栈内存中, 全局变量存储在全局区, 此时出现了冲突***. 如果使用auto修饰全局变量, 编译时会报错.
两年前针对这一点写过一篇文章Effective Objective-C 2.0——多用类型常量,少用#define预处理指令,本文是在这篇文章的基础上进行扩展的。
为了支持分离式编译,C++将定义和声明区分开。其中声明规定了变量的类型和名字,定义除此功能外还会申请存储空间并可能为变量赋一个初始值。
static,即静态声明。它在 作用域、存储方式、生命周期 等各方面影响一个变量或函数。文章将从 局部变量、全局变量、普通函数、类的static成员(包括数据成员与成员函数)来总结static。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
const: 定义常量,一般定义后不可改变 static: 静态,类名可以访问 public: 表示全局,类内部外部子类都可以访问; private: 表示私有的,只有本类内部可以使用; protected: 表示受保护的,只有本类或子类或父类中可以访问; 定义常量也可用 define 定义。 const与define在定义常量时会有如下区别: const用于类成员变量,一经定义不可修改,define用于全局常量,不可用于类成员变量的定义, const可在类中使用,define不能。 const定义的常量
常量 可以在任意作用域里定义,包括全局作用域。也就是可以在任何地方定义。常量 只是一个符号,会在 编译时 替换为具体的值。
在上一节中,我们对所有请求都回复它一个Hello World!这个信息,我们现在改变一下,添加一个方法,传入request,把Hello World!这一条注释掉
(1)const int *p=&x:不可改动*p的内容,但能够让指针p指向还有一个地址,和int const *p一样
既然函数不会改变对象,那么就如实说明,编译器能帮你确保函数的const属性,阅读代码的人也明确你的意图。
同样可以使用const ,fiinal,var 来声明,由于不确定类型,会和TS、Swift、Kotlin一样类型推导
以良好的方式编写C++ class 假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。 ① Header(头文件)中的防卫式声明 complex.h: # ifndef __COMPLEX__ # define __COMPLEX__ class complex { } # endif 防止头文件的内容被多次包含。 ② 把数据放在private声明下,提供接口访问数据 # ifndef __COMPLEX__ # define __COMPLEX__ class
extern放在变量或者函数之前,表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
我们一般把所有的全局变量和全局函数的实现都放在一个*.cpp文件里面,然后用一个同名的*.h文件包含所有的函数和变量的声明。如:
Hello,大家好!我是木荣。温故而知新,可以为师矣。作为一名攻城狮,扎实的基本功是解决问题及完成工作中任务的重要前提。没有良好的基本功作为铺垫,一味的追求知识的宽度是毫无意义,知其然更要知其所以然。因此,在平时和小伙伴们聊天时,在谈到学习技术方面的问题,我会告诉他们注重基本功。所以,最近文章会总结一些日常编程工作中常用的重要基本知识点,根据平时工作中常用的也是重要的知识点逐步展开。
对于 static 关键字来讲,它既可以用来修饰变量同时也可以用来修饰函数,而变量从大的方向上来讲又分为局部变量和全局变量,static 对于这两种变量的修饰也具有不同的意义。
以良好的方式编写C++ class 假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。
我们一般把全部的全局变量和全局函数的实现都放在一个*.cpp文件中面,然后用一个同名的*.h文件包括全部的函数和变量的声明。如:
本文介绍了C++中的宏定义、const关键字、static关键字、sizeof关键字的使用,以及它们在编程中的实际应用。
函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但会破坏此变量的访问范围(使得在此函数中定义的变量,不仅仅只受此函数控制)。static 关键字则可以很好的解决这个问题。
先解释下什么是静态常量(Const)以及什么是动态常量(Readonly)。 静态常量(Const)是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值。 动态常量(Readonly)的值则是在运行的那一刻才获得的,编译器编译期间将其标示为只读常量,而不用常量的值代替,这样动态常量不必在声明的时候就初始化,而可以延迟到构造函数中初始化。
将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。
段的分类 根据C语言的特点,每一个源程序生成的目标代码将包含源程序所需要表达的所有信息和功能。目标代码中各段生成情况如下:
修饰范围:类、字段、属性、方法、运算符、事件、构造函数(不能用于索引器、析构函数或类以外的类型)
局部变量声明一定是以 let 开头,类型一定是跟在冒号 : 的后面。语法歧义更少,语法分析器更容易编写。
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.com/heyonggang/p/3253036.html 1.什么是智能指针? 智能指针是一个行为类似指针但也提供其他功能的类。 智能指针类实现普通指针行为的类的区别在于:智能指针通常接收指向动态分配对象的指针并负责删除该对象。用户分配对象,但由智能指针类删除它,因此智能指针类需要实现复制控制成员来管理指向共享对
该文章介绍了static关键字在C++中的使用,主要包括static成员变量、static成员函数以及类/对象大小的计算。static成员变量是类的静态成员变量,可以通过类名直接访问,可以避免重复定义和静态链接库等问题。static成员函数是类的成员函数,可以在类外定义和实现,具有静态绑定和链接特点。类/对象大小的计算需要考虑类的成员变量和成员函数的存储空间,虚函数和虚继承等因素也会影响类的大小。
重定义(遮蔽)特性是一个 Rust 特有的语言特性。 相对于可变变量,重定义(遮蔽)一个变量,可以改变原有变量的数据类型和可变性。
今天我整合了2021年100道大厂高频C++基础面试题,里面包含了C++很多基础知识点,干货满满。因内容较多,篇幅较长,所以会分成上下两篇讲解,强烈建议小伙伴们收藏!
本文介绍了C++中的变量、表达式、运算符、输入输出、控制语句、函数、数组和指针等方面的基础知识。
const 成员函数是指在类中被声明为 const 的成员函数 将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。
1.程序运行知识 1.1 内存布局和分配方式 C程序的内存布局如下: 静态存储区:存储全局变量和static变量,通常在程序编译期间已经分配好了。 BSS段:存放未初始化的static变量和全局变量
const_cast也是一个强制类型转换操作符。《C++ Primer》中是这样描述它的:
C++中有的东西需要放在可以在.h文件中定义,有的东西则必须放在.cpp文件中定义,有的东西在不同的cpp文件中的名字可以一样,而有的则不能一样 那么究竟哪些东西可在头文件中定义,声明,哪些东西又必须
原文链接:https://www.cnblogs.com/DOMLX/p/10711810.html
首先想到的是,利用局部static对象特性,产生全局唯一的对象。但是如何来避免更多的对象被实例化出来呢。
对于代码来说,许多函数并不需要对自己的内置成员函数做出修改,甚至一旦修改就会有不和逻辑的事情产生。而且对于C++来说用const修饰this指针,普通对象和const对象都能调用;(若普通对象调用该函数会产生权限缩小的现象产生,这种权限的缩小是我们所允许的)
嵌入式C语言和普通C语言在语法上几乎没有差别,其主要差别在于普通C语言的运行环境是OS之上,有很多的标准库函数支撑调用,分配的内存是电脑的内存,其处理器就是电脑的CPU;而在嵌入式环境中,会涉及到底层的硬件,而硬件本身是没有标准库可以调用的,因而就需要开发者使用C语言编程调试硬件,使其可以工作,对于开发某一款芯片,有针对的编译器(或者交叉编译环境),可以分配的内存则是芯片的RAM、Flash,处理器则是芯片自身带的MCU,例如ARM、DSP等。
类型相近的才能发生隐式类型转换,如int和double,如果不相关,而对于指针和整型,指针是地址,整型和指针类型之间不会进行隐式类型转换,只能显式的强制类型转换:
领取专属 10元无门槛券
手把手带您无忧上云