菜鸟的天花板

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  23 随笔 :: 0 文章 :: 0 评论 :: 2133 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
通常情况下,对象是指一块能存储数据并具有某种类型的内存空间。在使用对象这个名词时,并不严格区分是类还是内置类型,也不区分是否命名或是否只读。
 
对象的名字随着定义马上就可以使用,因此在一条定义语句中,可以用先定义的变量值去初始化后定义的其他变量。
注:初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把变量的当前值擦除,而以一个新值替代。
 
作为C++11新标准的一部分,用花括号来初始化变量得到了全面应用,而在之前,这种初始化的形式仅在某些受限的场合下才能使用,这种初始化形式被称为列表初始化。
当用于内置类型的变量时,这种初始化形式有一个重要特点:如果使用列表初始化且初始值存在丢失信息的风险,则编译器将报错:
        例:
                    long double ld = 3.1415926536;
                    int a{ld},  b = {ld};            // 错误:转换未执行,因为存在丢失信息的风险
                    int c{ld},  d = ld;                         // 正确:转换执行,且确实丢失部分值
 
如果定义变量时没有指定初值,则变量被默认初始化,即变量被赋予默认值。
 
如果是内置类型的变量未被显式初始化,它的值由定义的位置决定:1)定义在任何函数体之外的变量被初始化为0;2)定义在函数体内部的内置类型变量将不被初始化。
 
绝大多数类都支持无须显式初始化而定义对象,这样的类提供了一个合适的默认值,例如string类规定如果没有指定初值则生成一个空串。
注:建议初始化每一个内置类型的变量!!
 
 
声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对这个名字的声明。
而定义(definition)负责创建与名字相关联的实体。
如果想声明一个变量而非定义它,就在变量名前加上extern关键字,而且不要显式地初始化变量。    
    注:1)任何包含显式初始化的声明即成为定义。如,给由extern关键字标记的变量赋一个初始值,就会抵消extern的作用。
            2)在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。
            3)变量能且只能被定义一次,但是可以被多次声明。
            4)如果在多个文件中使用一个变量,变量的定义必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其进行声明,却绝对不能重复定义。
 
变量命名规范:
            1)  标识符要能体现实际含义;
            2)变量名一般用小写字母,如index,不要使用Index或INDEX;
            3)用户自定义的类名,一般以大写字母开头,如Sales_item;
            4)如果标识符由多个单词组成,则单词间应有明显区分,如student_loan或studentLoan,不要使用studentloan。
 
名字的有效区域(作用域)始于名字的声明语句,以声明语句所在的作用域末端为结束。
建议:在对象第一次被使用的地方附近定义它是一种好选择
 
作用域中一旦声明了某个名字,它所嵌套着的所有作用域中都能访问该名字。同时,允许在内层作用域中重新定义外层作用域已有的名字。
    注:1)因为全局作用域本身并没有名字,所以当作用域操作符的左侧为空时 (如 ::A ),向全局作用域发出请求获取作用域操作符右侧名字对应的变量。                                                                                                                    
           2)如果函数有可能用到某全局变量,则不宜再定义一个同名的局部变量。
 
 
posted on   菜鸟1234567  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示