常量与变量

C/C++:深入分析 指针与引用的优缺点

泪湿孤枕 提交于 2019-12-02 11:39:26
前言 指针和引用本来就是两个完全不同的东西,引用甚至不能被称为对象。所以两者是没有可比性的,也没有什么意义去说谁比谁好,它们负责的工作也是不同的。但我以比较的方式写这篇文章,目的是能更浅显看出他们的特点。 一.常量引用与常量指针 疑难点1 首先我们需要知道的第一个东西是:绑定一个非常量引用必须要类型匹配,否则会显示”非常量引用的初始化值必须为左值“。就算你进行强制类型转换。这比指针可安全多了,因为指针就算被定义成常量指针,经过类型转换,也能够对其指向值进行修改。详细请看这篇博客: const==常量? 所以:在不对内存进行操作时,引用更加安全。 疑难点2 常量引用的第二个特点:常量引用可以绑定:任何一个可以转换成其类型的值都可以绑定。这是什么原理? 如我们执行以下操作时: double a; const int &b = a; 实际上编译器会先创建一个const int tmp的临时变量,然后将b绑定到这个临时变量上。为什么可以这样做? 因为绑定一个常量引用本来就不想通过这个引用改变其值,所以将其绑定在一个临时变量上是完全可行的。 但是如果你绑定的是一个非常量引用,你肯定是想通过这个引用修改值的,但如果采取绑定一个临时变量的方法,你就修改不了你想修改的那个变量的值。所以这样做是没有意义的,所以非常量引用的绑定必须类型匹配。 对于是否绑定在一个临时变量上,我们可以做以下测试:

C++之指针常量和的常量指针浅析

十年热恋 提交于 2019-12-02 09:26:45
//以int类型为例 指针常量——指针类型的常量( int const p *) 该指针是一个常量;也就是它指向某一个固定地址,不可以改变; 所以指针常量在定义时一定要初始化;此后我们不能再让它指向别的地址; 且不能用一个字符常量来初始化指针常量 ,可以用字符串常量或另一个指针常量来初始化; const int n = 10 ; int m = 100 , t = 0 ; int * const pa = & m ; //int *const pa=&n;// error 不能用一个字符常量来初始化指针常量 //char *const pa='A';//error 'A'是一个字符常量不是字符串常量 //char *const pa="A";//OK "A"是一个字符串常量 cout << * pa << endl ; 但可以通过改变该变量来改变指针指向的地址的内容; m = 20 ; cout << * pa << endl ; cout << m << endl ; 同样我们也可以通过改变该指针指向的地址的内容来改变该变量; * pa = n ; cout << * pa << endl ; 但无论该地址里的内容如何改变该指针常量都会指向该地址; //pa=&t; error 指针pa是一个常量 不能被修改 从它的书写方式也可以看出 const 强调的是指针 p ,即 p

阿里巴巴开发手册一

旧街凉风 提交于 2019-12-02 08:47:43
一、命名 1、【强制】 代码中的命名 均不能以美元符号或下划线开始或结束。 2、【强制】 代码中的命名 严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 3、【强制】 类名 使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO。 4、【强制】 方法名、参数名、成员变量、局部变量 都统一使用 lowerCamelCase 风格,必须遵从 驼峰形式。 5、【强制】 常量命名 全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。 6、【强制】 抽象类 命名使用 Abstract 或 Base 开头; 异常类 命名使用 Exception 结尾; 测试类 命名以它要测试的类的名称开始,以 Test 结尾。 7、【强制】中括号是数组类型的一部分,数组定义如下:String[] args。 8、【强制 】POJO 类中布尔类型的变量, 都不要加 is,否则部分框架解析会引起序列化错误。 9、【强制】 包名 统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用 单数形式,但是类名如果有复数含义,类名可以使用复数形式。 10、【强制】杜绝完全不规范的 缩写 ,避免望文不知义。 11、【推荐】为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词 组合来表达其意。 12、

第2章

谁说胖子不能爱 提交于 2019-12-02 07:06:26
1、不要混用带符号类型和无符号类型,混用时带符号类型将自动转换成无符号类型 2、形如-42字面值为42,‘-’表示对字面值取负 3、转义字符:反斜杠\后接的八进制数若超过3个只有前3个与\构成转义序列。 4、对象:通常情况下,对象是指一块能存储数据并具有某种类型的内存空间 5、初始化不是赋值! 6、定义于所有函数体之外的变量自动初始化为0,定义于函数体内部的变量不自动初始化 7、类的对象若没有显示的初始化,其值由类确定 8、变量声明:规定了变量的类型和名字;不申请内存 9、定义变量:规定变量的类型和名字并申请存储空间,可能会赋初值 10、如果要声明而非定义:添加关键字 extern,并不要显示的初始化 11、静态类型语言(statically typed) ,编译阶段检查类型 12、标识符:用户自定义的标识符不能连续出现两个下划线,也不能下划线紧接大写字母,定义在函数体外的标识符不能以下划线开头 13、作用域:当作用域操作符左侧为空时,向全局作用域发出请求获取作用域右侧名字对应的变量(若函数可能用到某个全局变量,最好不要再定义一个同名局部作用域) 14、引用:引用必须初始化,初始化后会和初始值一直绑定。引用 并非对象, 不能定义引用的引用 15、引用类型要与绑定对象严格匹配,不能与字面值或某个表达式的结果绑定 2.3.2 指针 1、在一条语句中定义多个指针时,每个变量前都必须有符号

Go语言基础之变量和常量

混江龙づ霸主 提交于 2019-12-02 06:49:48
Go语言基础之变量和常量 变量和常量是编程中必不可少的部分,也是很好理解的一部分。 一 、标识符与关键字 1.1 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和 _ (下划线)组成,并且只能以字母和 _ 开头。 举几个例子: abc , _ , _123 , a123 。 1.2 关键字 关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。 Go语言中有25个关键字: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 此外,Go语言中还有37个保留字。 Constants: true false iota nil Types: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error Functions: make

C++ constexper

有些话、适合烂在心里 提交于 2019-12-02 06:42:14
1.constexper(const experssion) 常量表达式:值 不会改变 并且在 编译过程 中就会得到计算结果的 表达式 ; (运行中得到结果的不能成为常量表达式) const int i = 3 ; //是一个常量表达式 const int j = i + 1 ; //是一个常量表达式 int k = 23 ; //k的值可以改变,从而不是一个常量表达式 const int m = f ( ) ; //不是常量表达式,m的值只有在运行时才会获取。 2.constexper变量 C++ 11 允许声明constexper类型来由编译器检查变量的值是否为一个常量表达式,声明constexper必须是一个常量,并且只能用常量或者常量表达式来初始化; 一般来说,若果一旦认为变量是一个常量表达式,就把其声明为constexper; 尽管指针和引用都可以定义为constexpr, 但是他们的初始值却受到了严格的限制。一个constexpr指针的初始值 必须**是nullptr或者0,或者是存储某个固定地址的对象。 函数体定义的变量并非存放在固定地址中,因此constexper指针不可以指向这样的变量;相反的,对于所有函数体之外的对象地址是固定不变的,可以用constexpr来定义; 在constexpr声明中,如果定义了一个指针,限定符号constexpr 仅仅对指针有效 ,与

GO中标识符,标识符,变量,常量,iota

半腔热情 提交于 2019-12-02 06:25:19
参考: https://www.cnblogs.com/nickchen121/p/11517455.html 一.标识符与关键字 1.标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和 _ (下划线)组成,并且只能以字母和 _ 开头。 举几个例子: abc , _ , _123 , a123 2.关键字 Go语言中有25个关键字: o语言中有25个关键字: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 此外,Go语言中还有37个保留字。 Constants: true false iota nil Types: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error Functions: make len cap new append copy

常量与变量

爷,独闯天下 提交于 2019-12-02 06:21:38
变量 ipo i input p process o output 变量: 定义世间万物变化的状态 变量的组成: 变量名(描述,接受变量值) 赋值符号 (赋值) 变量值(具体的值) 变量名的规范: 1.变量名必须要有描述意义 2.变量名由数字,字母,下划线组成,不能以数字开头 3.不能以关键字命名 定义变量的两种方式 1.下划线式 2.驼峰体 变量打印的三种属性 1.打印值 print(age) 2.打印内存地址 print(id(age)) 3.打印数据类型 print(type(age)) 常量 约定不变化的量 定义:变量名全大写 内存管理 定义变量并隐形,开辟一块内存空间 引用计数 针对变量值,被变量名引用的次数 垃圾回收机制 1.引用计数 ​ 1.对象被创建 >>>import sys >>>a = 123 >>>sys.getrefcount(a) 3 >>>b = 456 >>>sys.getrefcount(b) 2 123是小整数池中,a又定义一次,getrefcount又调用一次,所以是三次 2.被引用或调用 >>> import os >>> a = 456 >>> b = a >>> c = b >>> sys.getrefcount(a) 4 >>> sys.getrefcount(c) 4 >>> sys.getrefcount(b) 4 变量a,b

python常量

断了今生、忘了曾经 提交于 2019-12-02 04:59:39
常量 一、常量 变量是变化的量,常量则是不变的量。python中没有使用语法强制定义常量,也就是说,python中定义常量本质上就是变量。如果非要定义常量,变量名必须全大写。 AGE_OF_NICK = 19 print(AGE_OF_NICK) 19 AGE_OF_NICK = AGE_OF_NICK + 1 print(AGE_OF_NICK) 20 如果是常量,那就没必要更改,所以python就只制定了一个规范,而没指定常量的语法, 因此常量也是可以修改的,但不建议。 在c语言中有专门的常量定义语法, const int age = 19; ,一旦定义 age 为常量,更改 age 即会报错 。 二、内置常量 内置常量 有少数的常量存在于内置命名空间中。 它们是: False bool 类型的假值。 给 False 赋值是非法的并会引发 SyntaxError。 True bool 类型的真值。 给 True 赋值是非法的并会引发 SyntaxError。 None NoneType 类型的唯一值。 None 经常用于表示缺少值,当因为默认参数未传递给函数时。 给 None 赋值是非法的并会引发 SyntaxError。 NotImplemented 二进制特殊方法应返回的特殊值(例如,__eq__()、__lt__()、__add __()、__rsub__() 等

Go语言常量和变量

给你一囗甜甜゛ 提交于 2019-12-02 04:25:30
标识符与关键字 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和 _ (下划线)组成,并且只能以字母和 _ 开头。 举几个例子: abc , _ , _123 , a123 。 关键字 关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。 Go语言中有25个关键字: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var    此外,Go语言中还有37个保留字。 Constants: true false iota nil Types: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error Functions: make len cap new append copy close delete complex real