[{"data":1,"prerenderedAt":2401},["ShallowReactive",2],{"navigation":3,"\u002Fappendix\u002Fcoding_style":909,"\u002Fappendix\u002Fcoding_style-surround":2398},[4,36,56,96,230,270,414,457,508,583,649,685,767,864,900,904],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"附录","i-lucide-bookmark","\u002Fappendix","appendix",[10,12,16,20,24,28,32],{"title":5,"path":7,"stem":11,"icon":6},"appendix\u002Findex",{"title":13,"path":14,"stem":15,"icon":6},"命令行界面","\u002Fappendix\u002Fcli","appendix\u002Fcli",{"title":17,"path":18,"stem":19,"icon":6},"代码风格","\u002Fappendix\u002Fcoding_style","appendix\u002Fcoding_style",{"title":21,"path":22,"stem":23,"icon":6},"关键字列表","\u002Fappendix\u002Fkeyword","appendix\u002Fkeyword",{"title":25,"path":26,"stem":27,"icon":6},"运算符优先级和结合方向","\u002Fappendix\u002Foperator","appendix\u002Foperator",{"title":29,"path":30,"stem":31,"icon":6},"预处理指令","\u002Fappendix\u002Fpreprocessor","appendix\u002Fpreprocessor",{"title":33,"path":34,"stem":35,"icon":6},"值类别","\u002Fappendix\u002Fvalue_category","appendix\u002Fvalue_category",{"title":37,"icon":38,"path":39,"stem":40,"children":41},"第〇章 基本概念","i-lucide-monitor","\u002Fch00","ch00",[42,44,48,52],{"title":37,"path":39,"stem":43,"icon":38},"ch00\u002Findex",{"title":45,"path":46,"stem":47,"icon":38},"计算机","\u002Fch00\u002Fcomputer","ch00\u002Fcomputer",{"title":49,"path":50,"stem":51,"icon":38},"编程","\u002Fch00\u002Fprogramming","ch00\u002Fprogramming",{"title":53,"path":54,"stem":55,"icon":38},"编程语言","\u002Fch00\u002Fprogramming_language","ch00\u002Fprogramming_language",{"title":57,"icon":58,"path":59,"stem":60,"children":61},"第一章 感性认识 C++ 程序","i-lucide-book-open","\u002Fch01","ch01",[62,64,68,72,76,80,84,88,92],{"title":57,"path":59,"stem":63,"icon":58},"ch01\u002Findex",{"title":65,"path":66,"stem":67,"icon":58},"赋值和分支","\u002Fch01\u002Fassignment_and_if","ch01\u002Fassignment_and_if",{"title":69,"path":70,"stem":71,"icon":58},"最麻烦的门槛","\u002Fch01\u002Fenvironment","ch01\u002Fenvironment",{"title":73,"path":74,"stem":75,"icon":58},"第一个 C++ 程序","\u002Fch01\u002Ffirst_program","ch01\u002Ffirst_program",{"title":77,"path":78,"stem":79,"icon":58},"输入","\u002Fch01\u002Finput","ch01\u002Finput",{"title":81,"path":82,"stem":83,"icon":58},"综合运用","\u002Fch01\u002Fintegrated_use","ch01\u002Fintegrated_use",{"title":85,"path":86,"stem":87,"icon":58},"循环","\u002Fch01\u002Floop","ch01\u002Floop",{"title":89,"path":90,"stem":91,"icon":58},"更多的输出","\u002Fch01\u002Fmore_output","ch01\u002Fmore_output",{"title":93,"path":94,"stem":95,"icon":58},"总结","\u002Fch01\u002Fsummary","ch01\u002Fsummary",{"title":97,"path":98,"stem":99,"children":100,"icon":102},"第二章 理性认识 C++ 程序","\u002Fch02","ch02\u002Findex",[101,103,149,188,227],{"title":97,"path":98,"stem":99,"icon":102},"i-lucide-code",{"title":104,"icon":105,"path":106,"stem":107,"children":108},"第 1 部分 数据成分","i-lucide-database","\u002Fch02\u002Fpart1","ch02\u002Fpart1\u002Findex",[109,110,114,118,122,126],{"title":104,"path":106,"stem":107,"icon":105},{"title":111,"path":112,"stem":113,"icon":105},"初识数组","\u002Fch02\u002Fpart1\u002Farray_glance","ch02\u002Fpart1\u002Farray_glance",{"title":115,"path":116,"stem":117,"icon":105},"常量","\u002Fch02\u002Fpart1\u002Fconstant","ch02\u002Fpart1\u002Fconstant",{"title":119,"path":120,"stem":121,"icon":105},"声明语句","\u002Fch02\u002Fpart1\u002Fdeclaration_statement","ch02\u002Fpart1\u002Fdeclaration_statement",{"title":123,"path":124,"stem":125,"icon":105},"只读变量","\u002Fch02\u002Fpart1\u002Freadonly_variable","ch02\u002Fpart1\u002Freadonly_variable",{"title":127,"icon":128,"path":129,"stem":130,"children":131},"类型系统","i-lucide-dna","\u002Fch02\u002Fpart1\u002Ftype_system","ch02\u002Fpart1\u002Ftype_system\u002Findex",[132,133,137,141,145],{"title":127,"path":129,"stem":130,"icon":128},{"title":134,"path":135,"stem":136,"icon":128},"布尔类型","\u002Fch02\u002Fpart1\u002Ftype_system\u002Fboolean_type","ch02\u002Fpart1\u002Ftype_system\u002Fboolean_type",{"title":138,"path":139,"stem":140,"icon":128},"字符类型","\u002Fch02\u002Fpart1\u002Ftype_system\u002Fcharacter_type","ch02\u002Fpart1\u002Ftype_system\u002Fcharacter_type",{"title":142,"path":143,"stem":144,"icon":128},"浮点类型","\u002Fch02\u002Fpart1\u002Ftype_system\u002Ffloat_type","ch02\u002Fpart1\u002Ftype_system\u002Ffloat_type",{"title":146,"path":147,"stem":148,"icon":128},"整型","\u002Fch02\u002Fpart1\u002Ftype_system\u002Finteger_type","ch02\u002Fpart1\u002Ftype_system\u002Finteger_type",{"title":150,"icon":151,"path":152,"stem":153,"children":154},"第 2 部分 运算成分","i-lucide-calculator","\u002Fch02\u002Fpart2","ch02\u002Fpart2\u002Findex",[155,156,160,164,168,172,176,180,184],{"title":150,"path":152,"stem":153,"icon":151},{"title":157,"path":158,"stem":159,"icon":151},"算术运算符","\u002Fch02\u002Fpart2\u002Farithmetic_operator","ch02\u002Fpart2\u002Farithmetic_operator",{"title":161,"path":162,"stem":163,"icon":151},"赋值运算符","\u002Fch02\u002Fpart2\u002Fassignment_operator","ch02\u002Fpart2\u002Fassignment_operator",{"title":165,"path":166,"stem":167,"icon":151},"位运算符（选读）","\u002Fch02\u002Fpart2\u002Fbit_operator","ch02\u002Fpart2\u002Fbit_operator",{"title":169,"path":170,"stem":171,"icon":151},"关系运算符","\u002Fch02\u002Fpart2\u002Fcomparison_operator","ch02\u002Fpart2\u002Fcomparison_operator",{"title":173,"path":174,"stem":175,"icon":151},"算术类型隐式转换","\u002Fch02\u002Fpart2\u002Fimplicit_conversion","ch02\u002Fpart2\u002Fimplicit_conversion",{"title":177,"path":178,"stem":179,"icon":151},"自增减运算符","\u002Fch02\u002Fpart2\u002Fincdec_operator","ch02\u002Fpart2\u002Fincdec_operator",{"title":181,"path":182,"stem":183,"icon":151},"逻辑运算符","\u002Fch02\u002Fpart2\u002Flogical_operator","ch02\u002Fpart2\u002Flogical_operator",{"title":185,"path":186,"stem":187,"icon":151},"其它常用运算符","\u002Fch02\u002Fpart2\u002Fother_operator","ch02\u002Fpart2\u002Fother_operator",{"title":189,"icon":190,"path":191,"stem":192,"children":193},"第 3 部分 控制成分","i-lucide-git-branch","\u002Fch02\u002Fpart3","ch02\u002Fpart3\u002Findex",[194,195,199,203,207,211,215,219,223],{"title":189,"path":191,"stem":192,"icon":190},{"title":196,"path":197,"stem":198,"icon":190},"复合语句","\u002Fch02\u002Fpart3\u002Fcompound_statement","ch02\u002Fpart3\u002Fcompound_statement",{"title":200,"path":201,"stem":202,"icon":190},"for 语句","\u002Fch02\u002Fpart3\u002Ffor_statement","ch02\u002Fpart3\u002Ffor_statement",{"title":204,"path":205,"stem":206,"icon":190},"if 语句","\u002Fch02\u002Fpart3\u002Fif_statement","ch02\u002Fpart3\u002Fif_statement",{"title":208,"path":209,"stem":210,"icon":190},"跳转语句","\u002Fch02\u002Fpart3\u002Fjump_statement","ch02\u002Fpart3\u002Fjump_statement",{"title":212,"path":213,"stem":214,"icon":190},"空语句","\u002Fch02\u002Fpart3\u002Fnull_statement","ch02\u002Fpart3\u002Fnull_statement",{"title":216,"path":217,"stem":218,"icon":190},"作用域","\u002Fch02\u002Fpart3\u002Fscope","ch02\u002Fpart3\u002Fscope",{"title":220,"path":221,"stem":222,"icon":190},"switch 语句","\u002Fch02\u002Fpart3\u002Fswitch_statement","ch02\u002Fpart3\u002Fswitch_statement",{"title":224,"path":225,"stem":226,"icon":190},"while 语句","\u002Fch02\u002Fpart3\u002Fwhile_statement","ch02\u002Fpart3\u002Fwhile_statement",{"title":93,"path":228,"stem":229,"icon":102},"\u002Fch02\u002Fsummary","ch02\u002Fsummary",{"title":231,"icon":232,"path":233,"stem":234,"children":235},"第三章 过程式编程","i-lucide-function-square","\u002Fch03","ch03",[236,239,243,247,251,255,259,263,267],{"title":231,"path":233,"stem":237,"icon":238},"ch03\u002Findex","i-lucide-square-function",{"title":240,"path":241,"stem":242,"icon":232},"函数","\u002Fch03\u002Ffunction","ch03\u002Ffunction",{"title":244,"path":245,"stem":246,"icon":232},"函数的定义、声明和调用","\u002Fch03\u002Ffunction_definition","ch03\u002Ffunction_definition",{"title":248,"path":249,"stem":250,"icon":232},"函数的执行","\u002Fch03\u002Ffunction_execution","ch03\u002Ffunction_execution",{"title":252,"path":253,"stem":254,"icon":232},"初识函数","\u002Fch03\u002Ffunction_glance","ch03\u002Ffunction_glance",{"title":256,"path":257,"stem":258,"icon":232},"递归","\u002Fch03\u002Frecursion","ch03\u002Frecursion",{"title":260,"path":261,"stem":262,"icon":232},"重新认识 C++ 程序","\u002Fch03\u002Freview_cpp","ch03\u002Freview_cpp",{"title":264,"path":265,"stem":266,"icon":232},"再谈作用域","\u002Fch03\u002Fscope_again","ch03\u002Fscope_again",{"title":93,"path":268,"stem":269,"icon":232},"\u002Fch03\u002Fsummary","ch03\u002Fsummary",{"title":271,"icon":272,"path":273,"stem":274,"children":275},"第四章 POD 类型与结构","i-lucide-layers","\u002Fch04","ch04",[276,278,301,316,320,338,365,392,407,410],{"title":271,"path":273,"stem":277,"icon":272},"ch04\u002Findex",{"title":279,"icon":280,"path":281,"stem":282,"children":283},"数组","i-lucide-grid","\u002Fch04\u002Farray","ch04\u002Farray\u002Findex",[284,285,289,293,297],{"title":279,"path":281,"stem":282,"icon":280},{"title":286,"path":287,"stem":288,"icon":280},"二维数组","\u002Fch04\u002Farray\u002F2d_array","ch04\u002Farray\u002F2d_array",{"title":290,"path":291,"stem":292,"icon":280},"数组的定义和初始化","\u002Fch04\u002Farray\u002Farray_init","ch04\u002Farray\u002Farray_init",{"title":294,"path":295,"stem":296,"icon":280},"数组的用途","\u002Fch04\u002Farray\u002Farray_usage","ch04\u002Farray\u002Farray_usage",{"title":298,"path":299,"stem":300,"icon":280},"C 风格字符串","\u002Fch04\u002Farray\u002Fc_string","ch04\u002Farray\u002Fc_string",{"title":302,"icon":303,"path":304,"stem":305,"children":306},"迁移到 C 语言","i-lucide-arrow-right-left","\u002Fch04\u002Fcompare_with_c","ch04\u002Fcompare_with_c\u002Findex",[307,308,312],{"title":302,"path":304,"stem":305,"icon":303},{"title":309,"path":310,"stem":311,"icon":303},"需要注意的 C 特性","\u002Fch04\u002Fcompare_with_c\u002Fc_feature","ch04\u002Fcompare_with_c\u002Fc_feature",{"title":313,"path":314,"stem":315,"icon":303},"C 输入输出","\u002Fch04\u002Fcompare_with_c\u002Fc_io","ch04\u002Fcompare_with_c\u002Fc_io",{"title":317,"path":318,"stem":319,"icon":272},"枚举","\u002Fch04\u002Fenum","ch04\u002Fenum",{"title":321,"path":322,"stem":323,"children":324,"icon":326},"输入输出成分","\u002Fch04\u002Fio","ch04\u002Fio\u002Findex",[325,327,330,334],{"title":321,"path":322,"stem":323,"icon":326},"i-lucide-terminal",{"title":77,"path":328,"stem":329,"icon":326},"\u002Fch04\u002Fio\u002Finput","ch04\u002Fio\u002Finput",{"title":331,"path":332,"stem":333,"icon":326},"输入失败状态","\u002Fch04\u002Fio\u002Finput_fail","ch04\u002Fio\u002Finput_fail",{"title":335,"path":336,"stem":337,"icon":326},"输出","\u002Fch04\u002Fio\u002Foutput","ch04\u002Fio\u002Foutput",{"title":339,"icon":340,"path":341,"stem":342,"children":343},"链表","i-lucide-list","\u002Fch04\u002Flist","ch04\u002Flist\u002Findex",[344,345,349,353,357,361],{"title":339,"path":341,"stem":342,"icon":340},{"title":346,"path":347,"stem":348,"icon":340},"new[] 和 delete[]","\u002Fch04\u002Flist\u002Farr_new_del","ch04\u002Flist\u002Farr_new_del",{"title":350,"path":351,"stem":352,"icon":340},"链表的增删","\u002Fch04\u002Flist\u002Flist_add_del","ch04\u002Flist\u002Flist_add_del",{"title":354,"path":355,"stem":356,"icon":340},"链表的构建","\u002Fch04\u002Flist\u002Flist_construct","ch04\u002Flist\u002Flist_construct",{"title":358,"path":359,"stem":360,"icon":340},"安全性","\u002Fch04\u002Flist\u002Fsafety","ch04\u002Flist\u002Fsafety",{"title":362,"path":363,"stem":364,"icon":340},"存储期","\u002Fch04\u002Flist\u002Fstorage_duration","ch04\u002Flist\u002Fstorage_duration",{"title":366,"path":367,"stem":368,"children":369,"icon":371},"指针","\u002Fch04\u002Fpointer","ch04\u002Fpointer\u002Findex",[370,372,376,380,384,388],{"title":366,"path":367,"stem":368,"icon":371},"i-lucide-dot",{"title":373,"path":374,"stem":375,"icon":371},"何为指针","\u002Fch04\u002Fpointer\u002Fpointer","ch04\u002Fpointer\u002Fpointer",{"title":377,"path":378,"stem":379,"icon":371},"指针和数组","\u002Fch04\u002Fpointer\u002Fpointer_and_array","ch04\u002Fpointer\u002Fpointer_and_array",{"title":381,"path":382,"stem":383,"icon":371},"指针的定义 Ⅰ","\u002Fch04\u002Fpointer\u002Fpointer_def","ch04\u002Fpointer\u002Fpointer_def",{"title":385,"path":386,"stem":387,"icon":371},"指针的定义 Ⅱ","\u002Fch04\u002Fpointer\u002Fpointer_def_2","ch04\u002Fpointer\u002Fpointer_def_2",{"title":389,"path":390,"stem":391,"icon":371},"指针的简单使用","\u002Fch04\u002Fpointer\u002Fpointer_usage","ch04\u002Fpointer\u002Fpointer_usage",{"title":393,"path":394,"stem":395,"children":396,"icon":398},"结构体","\u002Fch04\u002Fstruct","ch04\u002Fstruct\u002Findex",[397,399,403],{"title":393,"path":394,"stem":395,"icon":398},"i-lucide-box",{"title":400,"path":401,"stem":402,"icon":398},"结构体的定义","\u002Fch04\u002Fstruct\u002Fstruct_def","ch04\u002Fstruct\u002Fstruct_def",{"title":404,"path":405,"stem":406,"icon":398},"结构体的使用","\u002Fch04\u002Fstruct\u002Fstruct_usage","ch04\u002Fstruct\u002Fstruct_usage",{"title":93,"path":408,"stem":409,"icon":272},"\u002Fch04\u002Fsummary","ch04\u002Fsummary",{"title":411,"path":412,"stem":413,"icon":272},"联合体","\u002Fch04\u002Funion","ch04\u002Funion",{"title":415,"icon":416,"path":417,"stem":418,"children":419},"第五章 初探面向对象","i-lucide-copy","\u002Fch05","ch05",[420,422,426,430,434,438,442,446,450,454],{"title":415,"path":417,"stem":421,"icon":416},"ch05\u002Findex",{"title":423,"path":424,"stem":425,"icon":416},"构造函数","\u002Fch05\u002Fconstructor","ch05\u002Fconstructor",{"title":427,"path":428,"stem":429,"icon":416},"复制构造函数","\u002Fch05\u002Fcopy_constructor","ch05\u002Fcopy_constructor",{"title":431,"path":432,"stem":433,"icon":416},"预置构造函数","\u002Fch05\u002Fdefaulted_constructor","ch05\u002Fdefaulted_constructor",{"title":435,"path":436,"stem":437,"icon":416},"例子：简单的字符串","\u002Fch05\u002Feasy_string","ch05\u002Feasy_string",{"title":439,"path":440,"stem":441,"icon":416},"收尾工作","\u002Fch05\u002Fmisc","ch05\u002Fmisc",{"title":443,"path":444,"stem":445,"icon":416},"重载","\u002Fch05\u002Foverload","ch05\u002Foverload",{"title":447,"path":448,"stem":449,"icon":416},"引用","\u002Fch05\u002Freference","ch05\u002Freference",{"title":451,"path":452,"stem":453,"icon":416},"浅复制与深复制","\u002Fch05\u002Fshallow_deep_copy","ch05\u002Fshallow_deep_copy",{"title":93,"path":455,"stem":456,"icon":416},"\u002Fch05\u002Fsummary","ch05\u002Fsummary",{"title":458,"icon":459,"path":460,"stem":461,"children":462},"第六章 运算符重载","i-lucide-component","\u002Fch06","ch06",[463,465,469,473,477,481,485,489,493,497,501,504],{"title":458,"path":460,"stem":464,"icon":459},"ch06\u002Findex",{"title":466,"path":467,"stem":468,"icon":459},"赋值运算符重载","\u002Fch06\u002Fassignment_overload","ch06\u002Fassignment_overload",{"title":470,"path":471,"stem":472,"icon":459},"赋值与初始化","\u002Fch06\u002Fassignment_vs_construct","ch06\u002Fassignment_vs_construct",{"title":474,"path":475,"stem":476,"icon":459},"类型转换重载","\u002Fch06\u002Fcast_overload","ch06\u002Fcast_overload",{"title":478,"path":479,"stem":480,"icon":459},"只读成员函数","\u002Fch06\u002Fconst_member_function","ch06\u002Fconst_member_function",{"title":482,"path":483,"stem":484,"icon":459},"友元","\u002Fch06\u002Ffriend","ch06\u002Ffriend",{"title":486,"path":487,"stem":488,"icon":459},"类外定义成员函数","\u002Fch06\u002Fnoninline_member_function","ch06\u002Fnoninline_member_function",{"title":490,"path":491,"stem":492,"icon":459},"非成员的运算符重载","\u002Fch06\u002Fnonmember_operator","ch06\u002Fnonmember_operator",{"title":494,"path":495,"stem":496,"icon":459},"特殊运算符重载","\u002Fch06\u002Fspecial_operator_overload","ch06\u002Fspecial_operator_overload",{"title":498,"path":499,"stem":500,"icon":459},"静态成员","\u002Fch06\u002Fstatic_member","ch06\u002Fstatic_member",{"title":93,"path":502,"stem":503,"icon":459},"\u002Fch06\u002Fsummary","ch06\u002Fsummary",{"title":505,"path":506,"stem":507,"icon":459},"`this` 指针","\u002Fch06\u002Fthis","ch06\u002Fthis",{"title":509,"path":510,"stem":511,"children":512,"icon":190},"第七章 继承与多态","\u002Fch07","ch07\u002Findex",[513,514,541,545,549,580],{"title":509,"path":510,"stem":511,"icon":190},{"title":515,"icon":516,"path":517,"stem":518,"children":519},"继承关系","i-lucide-share","\u002Fch07\u002Finheritance","ch07\u002Finheritance\u002Findex",[520,521,525,529,533,537],{"title":515,"path":517,"stem":518,"icon":516},{"title":522,"path":523,"stem":524,"icon":516},"关于成员名","\u002Fch07\u002Finheritance\u002Fabout_member_name","ch07\u002Finheritance\u002Fabout_member_name",{"title":526,"path":527,"stem":528,"icon":516},"派生类的构造","\u002Fch07\u002Finheritance\u002Fderived_constructor","ch07\u002Finheritance\u002Fderived_constructor",{"title":530,"path":531,"stem":532,"icon":516},"继承中的隐式转换","\u002Fch07\u002Finheritance\u002Fimplicit_cast_in_inheritance","ch07\u002Finheritance\u002Fimplicit_cast_in_inheritance",{"title":534,"path":535,"stem":536,"icon":516},"其它小问题","\u002Fch07\u002Finheritance\u002Fmisc","ch07\u002Finheritance\u002Fmisc",{"title":538,"path":539,"stem":540,"icon":516},"保护成员","\u002Fch07\u002Finheritance\u002Fprotected_member","ch07\u002Finheritance\u002Fprotected_member",{"title":542,"path":543,"stem":544,"icon":190},"多重继承","\u002Fch07\u002Fmi","ch07\u002Fmi",{"title":546,"path":547,"stem":548,"icon":190},"简单的对象关系","\u002Fch07\u002Fobject_relationships","ch07\u002Fobject_relationships",{"title":550,"icon":551,"path":552,"stem":553,"children":554},"多态","i-lucide-refresh","\u002Fch07\u002Fpolymorphism","ch07\u002Fpolymorphism\u002Findex",[555,556,560,564,568,572,576],{"title":550,"path":552,"stem":553,"icon":551},{"title":557,"path":558,"stem":559,"icon":551},"抽象类","\u002Fch07\u002Fpolymorphism\u002Fabstract_class","ch07\u002Fpolymorphism\u002Fabstract_class",{"title":561,"path":562,"stem":563,"icon":551},"C++ 风格类型转换","\u002Fch07\u002Fpolymorphism\u002Fcpp_cast","ch07\u002Fpolymorphism\u002Fcpp_cast",{"title":565,"path":566,"stem":567,"icon":551},"`override` 与 `final`","\u002Fch07\u002Fpolymorphism\u002Foverride_and_final","ch07\u002Fpolymorphism\u002Foverride_and_final",{"title":569,"path":570,"stem":571,"icon":551},"RTTI","\u002Fch07\u002Fpolymorphism\u002Frtti","ch07\u002Fpolymorphism\u002Frtti",{"title":573,"path":574,"stem":575,"icon":551},"虚析构函数","\u002Fch07\u002Fpolymorphism\u002Fvirtual_destructor","ch07\u002Fpolymorphism\u002Fvirtual_destructor",{"title":577,"path":578,"stem":579,"icon":551},"虚函数","\u002Fch07\u002Fpolymorphism\u002Fvirtual_function","ch07\u002Fpolymorphism\u002Fvirtual_function",{"title":93,"path":581,"stem":582,"icon":190},"\u002Fch07\u002Fsummary","ch07\u002Fsummary",{"title":584,"icon":585,"path":586,"stem":587,"children":588},"第八章 模板基础","i-lucide-layout-template","\u002Fch08","ch08",[589,591,595,599,603,607,646],{"title":584,"path":586,"stem":590,"icon":585},"ch08\u002Findex",{"title":592,"path":593,"stem":594,"icon":585},"类模板","\u002Fch08\u002Fclass_template","ch08\u002Fclass_template",{"title":596,"path":597,"stem":598,"icon":585},"默认实参","\u002Fch08\u002Fdefault_argument","ch08\u002Fdefault_argument",{"title":600,"path":601,"stem":602,"icon":585},"函数模板","\u002Fch08\u002Ffunction_template","ch08\u002Ffunction_template",{"title":604,"path":605,"stem":606,"icon":585},"非类型模板参数","\u002Fch08\u002Fnontype_template_param","ch08\u002Fnontype_template_param",{"title":608,"icon":609,"path":610,"stem":611,"children":612},"STL 容器和迭代器","i-lucide-container","\u002Fch08\u002Fstl_containers","ch08\u002Fstl_containers\u002Findex",[613,614,618,622,626,630,634,638,642],{"title":608,"path":610,"stem":611,"icon":609},{"title":615,"path":616,"stem":617,"icon":609},"容器适配器","\u002Fch08\u002Fstl_containers\u002Fadaptors","ch08\u002Fstl_containers\u002Fadaptors",{"title":619,"path":620,"stem":621,"icon":609},"迭代器的概念","\u002Fch08\u002Fstl_containers\u002Fiterator_concept","ch08\u002Fstl_containers\u002Fiterator_concept",{"title":623,"path":624,"stem":625,"icon":609},"初识迭代器","\u002Fch08\u002Fstl_containers\u002Fiterator_glance","ch08\u002Fstl_containers\u002Fiterator_glance",{"title":627,"path":628,"stem":629,"icon":609},"迭代器的用途","\u002Fch08\u002Fstl_containers\u002Fiterator_usage","ch08\u002Fstl_containers\u002Fiterator_usage",{"title":631,"path":632,"stem":633,"icon":609},"`std::map`","\u002Fch08\u002Fstl_containers\u002Fmap","ch08\u002Fstl_containers\u002Fmap",{"title":635,"path":636,"stem":637,"icon":609},"其它顺序容器","\u002Fch08\u002Fstl_containers\u002Fother_sequence","ch08\u002Fstl_containers\u002Fother_sequence",{"title":639,"path":640,"stem":641,"icon":609},"`std::set`","\u002Fch08\u002Fstl_containers\u002Fset","ch08\u002Fstl_containers\u002Fset",{"title":643,"path":644,"stem":645,"icon":609},"`std::vector`","\u002Fch08\u002Fstl_containers\u002Fvector","ch08\u002Fstl_containers\u002Fvector",{"title":93,"path":647,"stem":648,"icon":585},"\u002Fch08\u002Fsummary","ch08\u002Fsummary",{"title":650,"icon":651,"path":652,"stem":653,"children":654},"第九章 链接","i-lucide-link","\u002Fch09","ch09",[655,657,661,665,669,673,677,681],{"title":650,"path":652,"stem":656,"icon":651},"ch09\u002Findex",{"title":658,"path":659,"stem":660,"icon":651},"C 中的链接","\u002Fch09\u002Fc_linking","ch09\u002Fc_linking",{"title":662,"path":663,"stem":664,"icon":651},"多文件编译实践","\u002Fch09\u002Fcompile_multiple_files","ch09\u002Fcompile_multiple_files",{"title":666,"path":667,"stem":668,"icon":651},"模板中的友元","\u002Fch09\u002Ffriend_in_template","ch09\u002Ffriend_in_template",{"title":670,"path":671,"stem":672,"icon":651},"内联","\u002Fch09\u002Finline","ch09\u002Finline",{"title":674,"path":675,"stem":676,"icon":651},"单一定义原则","\u002Fch09\u002Fodr","ch09\u002Fodr",{"title":678,"path":679,"stem":680,"icon":651},"符号和连接","\u002Fch09\u002Fsymbol_and_linkage","ch09\u002Fsymbol_and_linkage",{"title":682,"path":683,"stem":684,"icon":651},"模板的链接","\u002Fch09\u002Ftemplate_linking","ch09\u002Ftemplate_linking",{"title":686,"icon":687,"path":688,"stem":689,"children":690},"第十章 常用库介绍 \u003CBadge type=\"warning\" text=\"TBC\" \u002F>","i-lucide-hard-drive","\u002Fch10","ch10",[691,694,717,732,736,740],{"title":692,"path":688,"stem":693,"icon":687},"第十章 常用库介绍","ch10\u002Findex",{"title":695,"icon":696,"path":697,"stem":698,"children":699},"代数数据类型","i-lucide-shapes","\u002Fch10\u002Fadt","ch10\u002Fadt\u002Findex",[700,701,705,709,713],{"title":695,"path":697,"stem":698,"icon":696},{"title":702,"path":703,"stem":704,"icon":696},"顶类型 `std::any`","\u002Fch10\u002Fadt\u002Fany","ch10\u002Fadt\u002Fany",{"title":706,"path":707,"stem":708,"icon":696},"底类型","\u002Fch10\u002Fadt\u002Fnoreturn","ch10\u002Fadt\u002Fnoreturn",{"title":710,"path":711,"stem":712,"icon":696},"通用积类型 `std::tuple`","\u002Fch10\u002Fadt\u002Ftuple","ch10\u002Fadt\u002Ftuple",{"title":714,"path":715,"stem":716,"icon":696},"通用和类型 `std::variant`","\u002Fch10\u002Fadt\u002Fvariant","ch10\u002Fadt\u002Fvariant",{"title":718,"icon":719,"path":720,"stem":721,"children":722},"文件读写","i-lucide-file-text","\u002Fch10\u002Ffile_io","ch10\u002Ffile_io\u002Findex",[723,724,728],{"title":718,"path":720,"stem":721,"icon":719},{"title":725,"path":726,"stem":727,"icon":719},"C 风格输入输出","\u002Fch10\u002Ffile_io\u002Fc_io","ch10\u002Ffile_io\u002Fc_io",{"title":729,"path":730,"stem":731,"icon":719},"流式输入输出","\u002Fch10\u002Ffile_io\u002Fstream","ch10\u002Ffile_io\u002Fstream",{"title":733,"path":734,"stem":735,"icon":687},"文件系统","\u002Fch10\u002Ffilesystem","ch10\u002Ffilesystem",{"title":737,"path":738,"stem":739,"icon":687},"伪随机数生成","\u002Fch10\u002Frandom","ch10\u002Frandom",{"title":741,"path":742,"stem":743,"children":744,"icon":746},"移动语义与智能指针","\u002Fch10\u002Fsmart_pointer","ch10\u002Fsmart_pointer\u002Findex",[745,747,751,755,759,763],{"title":741,"path":742,"stem":743,"icon":746},"i-lucide-pointer",{"title":748,"path":749,"stem":750,"icon":746},"`std::move` 与转发引用","\u002Fch10\u002Fsmart_pointer\u002Fmove_and_forward","ch10\u002Fsmart_pointer\u002Fmove_and_forward",{"title":752,"path":753,"stem":754,"icon":746},"所有权","\u002Fch10\u002Fsmart_pointer\u002Fownership","ch10\u002Fsmart_pointer\u002Fownership",{"title":756,"path":757,"stem":758,"icon":746},"右值引用","\u002Fch10\u002Fsmart_pointer\u002Frvalue_reference","ch10\u002Fsmart_pointer\u002Frvalue_reference",{"title":760,"path":761,"stem":762,"icon":746},"`std::shared_ptr`","\u002Fch10\u002Fsmart_pointer\u002Fshared_ptr","ch10\u002Fsmart_pointer\u002Fshared_ptr",{"title":764,"path":765,"stem":766,"icon":746},"特殊成员函数","\u002Fch10\u002Fsmart_pointer\u002Fspecial_member_function","ch10\u002Fsmart_pointer\u002Fspecial_member_function",{"title":768,"icon":769,"path":770,"stem":771,"children":772},"第十一章 函数式编程","i-lucide-sparkles","\u002Fch11","ch11",[773,775,794,821,825],{"title":768,"path":770,"stem":774,"icon":769},"ch11\u002Findex",{"title":776,"icon":777,"path":778,"stem":779,"children":780},"语法进阶","i-lucide-graduation-cap","\u002Fch11\u002Fadvanced","ch11\u002Fadvanced\u002Findex",[781,782,786,790],{"title":776,"path":778,"stem":779,"icon":777},{"title":783,"path":784,"stem":785,"icon":777},"实参依赖查找","\u002Fch11\u002Fadvanced\u002Fadl","ch11\u002Fadvanced\u002Fadl",{"title":787,"path":788,"stem":789,"icon":777},"可调用","\u002Fch11\u002Fadvanced\u002Fcallable","ch11\u002Fadvanced\u002Fcallable",{"title":791,"path":792,"stem":793,"icon":777},"预置比较","\u002Fch11\u002Fadvanced\u002Fdefaulted_compare","ch11\u002Fadvanced\u002Fdefaulted_compare",{"title":795,"icon":796,"path":797,"stem":798,"children":799},"语法基础","i-lucide-book-text","\u002Fch11\u002Fgrammar","ch11\u002Fgrammar\u002Findex",[800,801,805,809,813,817],{"title":795,"path":797,"stem":798,"icon":796},{"title":802,"path":803,"stem":804,"icon":796},"闭包","\u002Fch11\u002Fgrammar\u002Fclosure","ch11\u002Fgrammar\u002Fclosure",{"title":806,"path":807,"stem":808,"icon":796},"函数也即对象","\u002Fch11\u002Fgrammar\u002Ffunction_as_object","ch11\u002Fgrammar\u002Ffunction_as_object",{"title":810,"path":811,"stem":812,"icon":796},"高阶函数","\u002Fch11\u002Fgrammar\u002Fhigher_order_function","ch11\u002Fgrammar\u002Fhigher_order_function",{"title":814,"path":815,"stem":816,"icon":796},"Lambda 表达式","\u002Fch11\u002Fgrammar\u002Flambda","ch11\u002Fgrammar\u002Flambda",{"title":818,"path":819,"stem":820,"icon":796},"Lambda 表达式捕获","\u002Fch11\u002Fgrammar\u002Flambda_capture","ch11\u002Fgrammar\u002Flambda_capture",{"title":822,"path":823,"stem":824,"icon":769},"`std::sort`","\u002Fch11\u002Fstd_sort","ch11\u002Fstd_sort",{"title":826,"icon":827,"path":828,"stem":829,"children":830},"STL 算法","i-lucide-sort-asc","\u002Fch11\u002Fstl_algorithms","ch11\u002Fstl_algorithms\u002Findex",[831,832,836,840,844,848,852,856,860],{"title":826,"path":828,"stem":829,"icon":827},{"title":833,"path":834,"stem":835,"icon":827},"迁移到 STLv1","\u002Fch11\u002Fstl_algorithms\u002Fcompare_with_legacy","ch11\u002Fstl_algorithms\u002Fcompare_with_legacy",{"title":837,"path":838,"stem":839,"icon":827},"复制","\u002Fch11\u002Fstl_algorithms\u002Fcopy","ch11\u002Fstl_algorithms\u002Fcopy",{"title":841,"path":842,"stem":843,"icon":827},"筛选","\u002Fch11\u002Fstl_algorithms\u002Ffilter","ch11\u002Fstl_algorithms\u002Ffilter",{"title":845,"path":846,"stem":847,"icon":827},"其它算法","\u002Fch11\u002Fstl_algorithms\u002Fothers","ch11\u002Fstl_algorithms\u002Fothers",{"title":849,"path":850,"stem":851,"icon":827},"初识范围","\u002Fch11\u002Fstl_algorithms\u002Frange","ch11\u002Fstl_algorithms\u002Frange",{"title":853,"path":854,"stem":855,"icon":827},"归约","\u002Fch11\u002Fstl_algorithms\u002Freduce","ch11\u002Fstl_algorithms\u002Freduce",{"title":857,"path":858,"stem":859,"icon":827},"排序","\u002Fch11\u002Fstl_algorithms\u002Fsort","ch11\u002Fstl_algorithms\u002Fsort",{"title":861,"path":862,"stem":863,"icon":827},"变换","\u002Fch11\u002Fstl_algorithms\u002Ftransform","ch11\u002Fstl_algorithms\u002Ftransform",{"title":865,"icon":866,"path":867,"stem":868,"children":869},"第十二章 模板","i-lucide-git-fork","\u002Fch12","ch12",[870,873,877,881,885],{"title":871,"path":867,"stem":872,"icon":866},"第十二章 模板进阶","ch12\u002Findex",{"title":874,"path":875,"stem":876},"C++20 概念","\u002Fch12\u002Fconcepts","ch12\u002Fconcepts",{"title":878,"path":879,"stem":880},"模板元编程","\u002Fch12\u002Fmetaprogramming","ch12\u002Fmetaprogramming",{"title":882,"path":883,"stem":884},"模板特化与偏特化","\u002Fch12\u002Fspecialization","ch12\u002Fspecialization",{"title":886,"icon":887,"path":888,"stem":889,"children":890},"静态派发","i-lucide-route","\u002Fch12\u002Fstatic_dispatch","ch12\u002Fstatic_dispatch\u002Findex",[891,892,896],{"title":886,"path":888,"stem":889},{"title":893,"path":894,"stem":895},"定制点","\u002Fch12\u002Fstatic_dispatch\u002Fcustomize_point","ch12\u002Fstatic_dispatch\u002Fcustomize_point",{"title":897,"path":898,"stem":899},"类型擦除","\u002Fch12\u002Fstatic_dispatch\u002Ftype_erasure","ch12\u002Fstatic_dispatch\u002Ftype_erasure",{"title":901,"path":902,"stem":903,"icon":6},"后记","\u002Fpostscript","postscript",{"title":905,"path":906,"stem":907,"icon":908},"技术信息","\u002Ftechnical_info","technical_info","i-lucide-info",{"id":910,"title":17,"body":911,"description":17,"extension":2392,"links":2393,"meta":2394,"navigation":2395,"path":18,"seo":2396,"stem":19,"__hash__":2397},"docs\u002Fappendix\u002Fcoding_style.md",{"type":912,"value":913,"toc":2381},"minimark",[914,917,921,925,929,932,936,939,952,970,973,990,993,1015,1018,1034,1037,1040,1058,1061,1065,1068,1146,1149,1188,1191,1194,1235,1238,1241,1300,1303,1306,1347,1350,1353,1395,1411,1474,1477,1630,1633,1636,1639,1683,1724,1863,1866,1905,1908,1911,1914,1944,1947,1972,1975,1978,1981,1984,1987,2007,2010,2056,2059,2099,2138,2153,2197,2204,2207,2210,2223,2230,2297,2303,2368,2377],[915,916,17],"h1",{"id":17},[918,919,920],"p",{},"本附录主要讨论有关代码风格的几个小问题。",[922,923,924],"h2",{"id":924},"命名",[926,927,928],"h3",{"id":928},"命名法",[918,930,931],{},"我们希望变量的命名是有意义的。这里介绍一些常见的变量命名规则：",[933,934,935],"h4",{"id":935},"小驼峰命名法",[918,937,938],{},"将所有单词无缝隙连接在一起，但是：",[940,941,942,946,949],"ul",{},[943,944,945],"li",{},"第一个单词全部小写；",[943,947,948],{},"其余的单词首字母大写，但后续字母小写；",[943,950,951],{},"缩写的大小写与首字母保持相同。",[918,953,954,955,959,960,959,963,959,966,969],{},"这种命名法的例子有：",[956,957,958],"code",{},"myFirstName","  ",[956,961,962],{},"myLastName",[956,964,965],{},"nextStudentName",[956,967,968],{},"intCount"," 等。一般地，这种命名法用于变量名。",[933,971,972],{"id":972},"大驼峰命名法",[918,974,975,976,979,980,979,983,979,986,989],{},"将所有单词无缝隙连接在一起，且所有单词首字母大写，后续字母小写。缩写单词全部大写。这种命名法的例子有：",[956,977,978],{},"GameMode"," ",[956,981,982],{},"CoordinateUtil",[956,984,985],{},"ConfigHelper",[956,987,988],{},"IOStatus"," 等。一般地，这种命名法用于类名、结构体名，在有的语言里也用于函数命名。",[933,991,992],{"id":992},"下划线分隔命名法",[918,994,995,996,979,999,979,1002,979,1005,1008,1009,1014],{},"所有单词使用下划线分隔，全部单词小写或大写。这种命名法的例子有：",[956,997,998],{},"MINUMUM_REQUIRED_VERSION",[956,1000,1001],{},"GRID_SIZE",[956,1003,1004],{},"usb_client",[956,1006,1007],{},"out_of_range"," 等。一般地，大写命名用于",[1010,1011,1013],"a",{"href":1012},"\u002Fappendix\u002Fpreprocessor#idx_%E5%AE%8F","宏","定义，小写字母用于文件名，有时也用于函数形式参数。",[933,1016,1017],{"id":1017},"匈牙利命名法",[918,1019,1020,1021,979,1024,979,1027,979,1030,1033],{},"用一些小写字母的前缀指明该变量的数据类型，紧随其后是一些无缝衔接的单词，其中首字母大写，后续字母小写。这种命名法的例子有：",[956,1022,1023],{},"chGrade",[956,1025,1026],{},"nLength",[956,1028,1029],{},"bOnOff",[956,1031,1032],{},"strStudentName"," 等。一般地，只有动态类型语言（比如 Visual Basic，JavaScript 等）推荐使用这种命名方法，因为这样可以显式地指明它们的类型从而避免错误。",[926,1035,1036],{"id":1036},"推荐命名风格",[918,1038,1039],{},"关于命名的风格和建议，我们已经在数据成分的结尾讲了很多了。这里列出本书的基本命名风格：",[1041,1042,1043,1046,1049,1052,1055],"ol",{},[943,1044,1045],{},"一般的变量名和函数名（对象名）使用小驼峰命名法；",[943,1047,1048],{},"命名空间、枚举名和枚举项使用大驼峰命名法；",[943,1050,1051],{},"结构体名（类名）使用大驼峰命名法；",[943,1053,1054],{},"宏、只读变量使用大写的下划线分隔命名法；",[943,1056,1057],{},"文件名使用小写的下划线分隔命名法。",[918,1059,1060],{},"不过除此之外，还有一些关于命名的建议，主要针对如何起一个严谨的、易于理解的名字。",[933,1062,1064],{"id":1063},"在写代码的时候任何名字都要有意义","在写代码的时候，任何名字都要有意义",[918,1066,1067],{},"比如：",[1069,1070,1075],"pre",{"className":1071,"code":1072,"language":1073,"meta":1074,"style":1074},"language-cpp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","int num, sum, result; \u002F\u002F 简单的标记\nbool isOK, isFinish, shouldExit; \u002F\u002F 布尔型使用isXX的命名，与其含义对应\nint sumOfPeoplesWhoHaveDisease; \u002F\u002F 也不建议太长的名字，看起来费劲。\n","cpp","",[956,1076,1077,1109,1133],{"__ignoreMap":1074},[1078,1079,1082,1086,1090,1094,1097,1099,1102,1105],"span",{"class":1080,"line":1081},"line",1,[1078,1083,1085],{"class":1084},"spNyl","int",[1078,1087,1089],{"class":1088},"sTEyZ"," num",[1078,1091,1093],{"class":1092},"sMK4o",",",[1078,1095,1096],{"class":1088}," sum",[1078,1098,1093],{"class":1092},[1078,1100,1101],{"class":1088}," result",[1078,1103,1104],{"class":1092},";",[1078,1106,1108],{"class":1107},"sHwdD"," \u002F\u002F 简单的标记\n",[1078,1110,1112,1115,1118,1120,1123,1125,1128,1130],{"class":1080,"line":1111},2,[1078,1113,1114],{"class":1084},"bool",[1078,1116,1117],{"class":1088}," isOK",[1078,1119,1093],{"class":1092},[1078,1121,1122],{"class":1088}," isFinish",[1078,1124,1093],{"class":1092},[1078,1126,1127],{"class":1088}," shouldExit",[1078,1129,1104],{"class":1092},[1078,1131,1132],{"class":1107}," \u002F\u002F 布尔型使用isXX的命名，与其含义对应\n",[1078,1134,1136,1138,1141,1143],{"class":1080,"line":1135},3,[1078,1137,1085],{"class":1084},[1078,1139,1140],{"class":1088}," sumOfPeoplesWhoHaveDisease",[1078,1142,1104],{"class":1092},[1078,1144,1145],{"class":1107}," \u002F\u002F 也不建议太长的名字，看起来费劲。\n",[918,1147,1148],{},"如果非要写单字母变量，比如在考试、竞赛等追求效率的场合，也建议有一定的含义：",[1069,1150,1152],{"className":1071,"code":1151,"language":1073,"meta":1074,"style":1074},"int n, s, r; \u002F\u002F 可以指 number, sum, result\nint a1;      \u002F\u002F 不好\n",[956,1153,1154,1176],{"__ignoreMap":1074},[1078,1155,1156,1158,1161,1163,1166,1168,1171,1173],{"class":1080,"line":1081},[1078,1157,1085],{"class":1084},[1078,1159,1160],{"class":1088}," n",[1078,1162,1093],{"class":1092},[1078,1164,1165],{"class":1088}," s",[1078,1167,1093],{"class":1092},[1078,1169,1170],{"class":1088}," r",[1078,1172,1104],{"class":1092},[1078,1174,1175],{"class":1107}," \u002F\u002F 可以指 number, sum, result\n",[1078,1177,1178,1180,1183,1185],{"class":1080,"line":1111},[1078,1179,1085],{"class":1084},[1078,1181,1182],{"class":1088}," a1",[1078,1184,1104],{"class":1092},[1078,1186,1187],{"class":1107},"      \u002F\u002F 不好\n",[933,1189,1190],{"id":1190},"尽量避免汉语拼音命名",[918,1192,1193],{},"尽量避免汉语拼音命名，更不能使用拼音首字母。由于汉语拼音在缺乏音调时拥有歧义性，阅读起来有一定困难。",[1069,1195,1197],{"className":1071,"code":1196,"language":1073,"meta":1074,"style":1074},"int cxjg;         \u002F\u002F 这是啥？\nint chaXunJieGuo; \u002F\u002F 还是有些模糊\nint queryResult;  \u002F\u002F 就比较好\n",[956,1198,1199,1211,1223],{"__ignoreMap":1074},[1078,1200,1201,1203,1206,1208],{"class":1080,"line":1081},[1078,1202,1085],{"class":1084},[1078,1204,1205],{"class":1088}," cxjg",[1078,1207,1104],{"class":1092},[1078,1209,1210],{"class":1107},"         \u002F\u002F 这是啥？\n",[1078,1212,1213,1215,1218,1220],{"class":1080,"line":1111},[1078,1214,1085],{"class":1084},[1078,1216,1217],{"class":1088}," chaXunJieGuo",[1078,1219,1104],{"class":1092},[1078,1221,1222],{"class":1107}," \u002F\u002F 还是有些模糊\n",[1078,1224,1225,1227,1230,1232],{"class":1080,"line":1135},[1078,1226,1085],{"class":1084},[1078,1228,1229],{"class":1088}," queryResult",[1078,1231,1104],{"class":1092},[1078,1233,1234],{"class":1107},"  \u002F\u002F 就比较好\n",[933,1236,1237],{"id":1237},"非成员的函数命名建议使用祈使语气",[918,1239,1240],{},"祈使语气即 动词-宾语 的结构，如：",[1069,1242,1244],{"className":1071,"code":1243,"language":1073,"meta":1074,"style":1074},"bool checkResult();\nvoid getData(int seed);\nint calculateSum();\nvoid f();              \u002F\u002F 这又是啥？\n",[956,1245,1246,1257,1277,1286],{"__ignoreMap":1074},[1078,1247,1248,1250,1254],{"class":1080,"line":1081},[1078,1249,1114],{"class":1084},[1078,1251,1253],{"class":1252},"s2Zo4"," checkResult",[1078,1255,1256],{"class":1092},"();\n",[1078,1258,1259,1262,1265,1268,1270,1274],{"class":1080,"line":1111},[1078,1260,1261],{"class":1084},"void",[1078,1263,1264],{"class":1252}," getData",[1078,1266,1267],{"class":1092},"(",[1078,1269,1085],{"class":1084},[1078,1271,1273],{"class":1272},"sHdIc"," seed",[1078,1275,1276],{"class":1092},");\n",[1078,1278,1279,1281,1284],{"class":1080,"line":1135},[1078,1280,1085],{"class":1084},[1078,1282,1283],{"class":1252}," calculateSum",[1078,1285,1256],{"class":1092},[1078,1287,1289,1291,1294,1297],{"class":1080,"line":1288},4,[1078,1290,1261],{"class":1084},[1078,1292,1293],{"class":1252}," f",[1078,1295,1296],{"class":1092},"();",[1078,1298,1299],{"class":1107},"              \u002F\u002F 这又是啥？\n",[933,1301,1302],{"id":1302},"慎用非英文命名",[918,1304,1305],{},"某些编译环境（比如 VS）支持非英文字母的声明符。你可以使用中文命名，但是可能会出现编码问题等难以调试的错误。而且在团队编程中，不能保证他人的编译环境也支持英文命名。因此如非必要，仍然建议使用英文命名。",[1069,1307,1309],{"className":1071,"code":1308,"language":1073,"meta":1074,"style":1074},"int 最终结果;       \u002F\u002F 或许可以，但不建议\nvoid 初始化();      \u002F\u002F 或许可以，但不建议\nvoid доСвидания(); \u002F\u002F 同志，不要为难自己\n",[956,1310,1311,1323,1335],{"__ignoreMap":1074},[1078,1312,1313,1315,1318,1320],{"class":1080,"line":1081},[1078,1314,1085],{"class":1084},[1078,1316,1317],{"class":1088}," 最终结果",[1078,1319,1104],{"class":1092},[1078,1321,1322],{"class":1107},"       \u002F\u002F 或许可以，但不建议\n",[1078,1324,1325,1327,1330,1332],{"class":1080,"line":1111},[1078,1326,1261],{"class":1084},[1078,1328,1329],{"class":1088}," 初始化",[1078,1331,1296],{"class":1092},[1078,1333,1334],{"class":1107},"      \u002F\u002F 或许可以，但不建议\n",[1078,1336,1337,1339,1342,1344],{"class":1080,"line":1135},[1078,1338,1261],{"class":1084},[1078,1340,1341],{"class":1088}," доСвидания",[1078,1343,1296],{"class":1092},[1078,1345,1346],{"class":1107}," \u002F\u002F 同志，不要为难自己\n",[922,1348,1349],{"id":1349},"缩进",[918,1351,1352],{},"关于缩进，我们在感性认识章节已经有所讨论了。整体来说，对于一个复合语句要进行缩进。缩进可以为 4 个空格，或者一个制表符 Tab。",[1069,1354,1356],{"className":1071,"code":1355,"language":1073,"meta":1074,"style":1074},"if (condition) {\n    \u002F\u002F four spaces\n    i++;\n}\n",[956,1357,1358,1376,1381,1390],{"__ignoreMap":1074},[1078,1359,1360,1364,1367,1370,1373],{"class":1080,"line":1081},[1078,1361,1363],{"class":1362},"s7zQu","if",[1078,1365,1366],{"class":1092}," (",[1078,1368,1369],{"class":1088},"condition",[1078,1371,1372],{"class":1092},")",[1078,1374,1375],{"class":1092}," {\n",[1078,1377,1378],{"class":1080,"line":1111},[1078,1379,1380],{"class":1107},"    \u002F\u002F four spaces\n",[1078,1382,1383,1387],{"class":1080,"line":1135},[1078,1384,1386],{"class":1385},"swJcz","    i",[1078,1388,1389],{"class":1092},"++;\n",[1078,1391,1392],{"class":1080,"line":1288},[1078,1393,1394],{"class":1092},"}\n",[918,1396,1397,1398,979,1400,979,1403,1406,1407,1410],{},"对于非复合语句的 ",[956,1399,1363],{},[956,1401,1402],{},"else",[956,1404,1405],{},"for"," 或 ",[956,1408,1409],{},"while"," ，也可以换行后缩进：",[1069,1412,1414],{"className":1071,"code":1413,"language":1073,"meta":1074,"style":1074},"for (int i{0}; i \u003C n; i++)\n    a[i] = i;\n",[956,1415,1416,1452],{"__ignoreMap":1074},[1078,1417,1418,1420,1422,1424,1427,1431,1434,1436,1439,1442,1444,1446,1449],{"class":1080,"line":1081},[1078,1419,1405],{"class":1362},[1078,1421,1366],{"class":1092},[1078,1423,1085],{"class":1084},[1078,1425,1426],{"class":1088}," i{",[1078,1428,1430],{"class":1429},"sbssI","0",[1078,1432,1433],{"class":1088},"}",[1078,1435,1104],{"class":1092},[1078,1437,1438],{"class":1088}," i ",[1078,1440,1441],{"class":1092},"\u003C",[1078,1443,1160],{"class":1088},[1078,1445,1104],{"class":1092},[1078,1447,1448],{"class":1088}," i",[1078,1450,1451],{"class":1092},"++)\n",[1078,1453,1454,1457,1460,1463,1466,1469,1471],{"class":1080,"line":1111},[1078,1455,1456],{"class":1088},"    a",[1078,1458,1459],{"class":1092},"[",[1078,1461,1462],{"class":1088},"i",[1078,1464,1465],{"class":1092},"]",[1078,1467,1468],{"class":1092}," =",[1078,1470,1448],{"class":1088},[1078,1472,1473],{"class":1092},";\n",[918,1475,1476],{},"有些情况需要逆缩进，即向左取消缩进。这种情况一般只发生在非 switch 的标号和成员访问说明符上。",[1069,1478,1480],{"className":1071,"code":1479,"language":1073,"meta":1074,"style":1074},"int main() {\n    int i = 0;\nloop: \u002F\u002F 向左取消缩进\n    i++;\n    if (i \u003C 10) goto loop;\n}\nstruct Student {\npublic: \u002F\u002F 向左取消缩进\n    std::string name;\n    int no;\nprivate: \u002F\u002F 向左取消缩进\n    double gpa;\n};\n",[956,1481,1482,1494,1509,1521,1527,1553,1558,1569,1579,1593,1603,1613,1624],{"__ignoreMap":1074},[1078,1483,1484,1486,1489,1492],{"class":1080,"line":1081},[1078,1485,1085],{"class":1084},[1078,1487,1488],{"class":1252}," main",[1078,1490,1491],{"class":1092},"()",[1078,1493,1375],{"class":1092},[1078,1495,1496,1499,1501,1504,1507],{"class":1080,"line":1111},[1078,1497,1498],{"class":1084},"    int",[1078,1500,1438],{"class":1088},[1078,1502,1503],{"class":1092},"=",[1078,1505,1506],{"class":1429}," 0",[1078,1508,1473],{"class":1092},[1078,1510,1511,1515,1518],{"class":1080,"line":1135},[1078,1512,1514],{"class":1513},"sBMFI","loop",[1078,1516,1517],{"class":1092},":",[1078,1519,1520],{"class":1107}," \u002F\u002F 向左取消缩进\n",[1078,1522,1523,1525],{"class":1080,"line":1288},[1078,1524,1386],{"class":1088},[1078,1526,1389],{"class":1092},[1078,1528,1530,1533,1535,1538,1540,1543,1545,1548,1551],{"class":1080,"line":1529},5,[1078,1531,1532],{"class":1362},"    if",[1078,1534,1366],{"class":1092},[1078,1536,1537],{"class":1088},"i ",[1078,1539,1441],{"class":1092},[1078,1541,1542],{"class":1429}," 10",[1078,1544,1372],{"class":1092},[1078,1546,1547],{"class":1362}," goto",[1078,1549,1550],{"class":1513}," loop",[1078,1552,1473],{"class":1092},[1078,1554,1556],{"class":1080,"line":1555},6,[1078,1557,1394],{"class":1092},[1078,1559,1561,1564,1567],{"class":1080,"line":1560},7,[1078,1562,1563],{"class":1084},"struct",[1078,1565,1566],{"class":1513}," Student",[1078,1568,1375],{"class":1092},[1078,1570,1572,1575,1577],{"class":1080,"line":1571},8,[1078,1573,1574],{"class":1084},"public",[1078,1576,1517],{"class":1092},[1078,1578,1520],{"class":1107},[1078,1580,1582,1585,1588,1591],{"class":1080,"line":1581},9,[1078,1583,1584],{"class":1513},"    std",[1078,1586,1587],{"class":1092},"::",[1078,1589,1590],{"class":1385},"string name",[1078,1592,1473],{"class":1092},[1078,1594,1596,1598,1601],{"class":1080,"line":1595},10,[1078,1597,1498],{"class":1084},[1078,1599,1600],{"class":1385}," no",[1078,1602,1473],{"class":1092},[1078,1604,1606,1609,1611],{"class":1080,"line":1605},11,[1078,1607,1608],{"class":1084},"private",[1078,1610,1517],{"class":1092},[1078,1612,1520],{"class":1107},[1078,1614,1616,1619,1622],{"class":1080,"line":1615},12,[1078,1617,1618],{"class":1084},"    double",[1078,1620,1621],{"class":1385}," gpa",[1078,1623,1473],{"class":1092},[1078,1625,1627],{"class":1080,"line":1626},13,[1078,1628,1629],{"class":1092},"};\n",[918,1631,1632],{},"也有一些场合使用 2 空格缩进，但如今很少用场合使用 Tab 缩进（基本上只有 Makefile 要求必须如此）。因此建议读者使用空格缩进，可以将键盘上的 Tab 键映射为 4 个空格的输入。",[922,1634,1635],{"id":1635},"空格与空行",[918,1637,1638],{},"C\u002FC++非常不同于当时的其它语言（如 BASIC、Pascal 等），它频繁地使用各种各样的符号而非字母作为语言的一部分。比如下面这个程序：",[1640,1641,1642,1655],"table",{},[1643,1644,1645],"thead",{},[1646,1647,1648,1652],"tr",{},[1649,1650,1651],"th",{},"Pascal",[1649,1653,1654],{},"C\u002FC++",[1656,1657,1658],"tbody",{},[1646,1659,1660,1673],{},[1661,1662,1663,1672],"td",{},[1069,1664,1667],{"className":1665},[1666],"table-code",[956,1668,1671],{"className":1669},[1670],"language-pascal","program division;\nvar a,b,c,d,i:integer;\nbegin\n    for i:=1 to 5 do\n    begin\n        readln(a,b);\n        if not(b=0) then\n        begin\n            c:= a div b;\n            d:= a mod b;\n            writeln(c,' ',d)\n        end\n        else writeln('div by 0');\n    end;\nend.","\n```\n",[1661,1674,1675,1672],{},[1069,1676,1678],{"className":1677},[1666],[956,1679,1682],{"className":1680},[1681],"language-cpp","\u002F\u002F division\n#include \u003Cstdio.h>\nint main(){\n    int a,b,c,d,i;\n    for(i=1;i\u003C=5;i++){\n        scanf(\"%d%d\",&a,&b);\n        if(!(b==0)){\n            c=a\u002Fb;\n            d=a%b;\n            printf(\"%d %d\\n\",c,d);\n        }\n        else printf(\"div by 0\\n\");\n    }\n}",[918,1684,1685,1686,979,1689,979,1692,979,1695,979,1698,979,1701,1704,1705,979,1708,979,1711,979,1714,979,1717,979,1720,1723],{},"可以看到 C\u002FC++ 运用了更多的类似 ",[956,1687,1688],{},"%",[956,1690,1691],{},"&",[956,1693,1694],{},"!",[956,1696,1697],{},"#",[956,1699,1700],{},"\u003C>",[956,1702,1703],{},"{}"," 等符号，而同时代的 Pascal 语言却大多用 ",[956,1706,1707],{},"not",[956,1709,1710],{},"then",[956,1712,1713],{},"begin",[956,1715,1716],{},"end",[956,1718,1719],{},"div",[956,1721,1722],{},"mod"," 等英文单词来实现这些功能。这就导致了相同的程序，用 C\u002FC++ 写会更加紧凑，可读性也相对较差。这就体现出空格的重要性了：空格有助于将紧凑的符号语言拆散。比如：",[1069,1725,1727],{"className":1071,"code":1726,"language":1073,"meta":1074,"style":1074},"a==c&&c!=b?(max++,false):check(a);\na == c && c != b ? (max++, false) : check(a);\na == c  &&  c != b ? ( max ++ , false ) : check ( a ) ;\n",[956,1728,1729,1768,1812],{"__ignoreMap":1074},[1078,1730,1731,1733,1736,1739,1742,1744,1747,1750,1753,1756,1759,1762,1764,1766],{"class":1080,"line":1081},[1078,1732,1010],{"class":1088},[1078,1734,1735],{"class":1092},"==",[1078,1737,1738],{"class":1088},"c",[1078,1740,1741],{"class":1092},"&&",[1078,1743,1738],{"class":1088},[1078,1745,1746],{"class":1092},"!=",[1078,1748,1749],{"class":1088},"b",[1078,1751,1752],{"class":1092},"?(",[1078,1754,1755],{"class":1088},"max",[1078,1757,1758],{"class":1092},"++,false):",[1078,1760,1761],{"class":1252},"check",[1078,1763,1267],{"class":1092},[1078,1765,1010],{"class":1088},[1078,1767,1276],{"class":1092},[1078,1769,1770,1773,1775,1778,1780,1782,1784,1787,1790,1792,1794,1797,1800,1803,1806,1808,1810],{"class":1080,"line":1111},[1078,1771,1772],{"class":1088},"a ",[1078,1774,1735],{"class":1092},[1078,1776,1777],{"class":1088}," c ",[1078,1779,1741],{"class":1092},[1078,1781,1777],{"class":1088},[1078,1783,1746],{"class":1092},[1078,1785,1786],{"class":1088}," b ",[1078,1788,1789],{"class":1092},"?",[1078,1791,1366],{"class":1092},[1078,1793,1755],{"class":1088},[1078,1795,1796],{"class":1092},"++,",[1078,1798,1799],{"class":1092}," false)",[1078,1801,1802],{"class":1092}," :",[1078,1804,1805],{"class":1252}," check",[1078,1807,1267],{"class":1092},[1078,1809,1010],{"class":1088},[1078,1811,1276],{"class":1092},[1078,1813,1814,1816,1818,1821,1823,1826,1828,1830,1832,1834,1837,1840,1843,1846,1849,1851,1853,1855,1858,1860],{"class":1080,"line":1135},[1078,1815,1772],{"class":1088},[1078,1817,1735],{"class":1092},[1078,1819,1820],{"class":1088}," c  ",[1078,1822,1741],{"class":1092},[1078,1824,1825],{"class":1088},"  c ",[1078,1827,1746],{"class":1092},[1078,1829,1786],{"class":1088},[1078,1831,1789],{"class":1092},[1078,1833,1366],{"class":1092},[1078,1835,1836],{"class":1088}," max ",[1078,1838,1839],{"class":1092},"++",[1078,1841,1842],{"class":1092}," ,",[1078,1844,1845],{"class":1092}," false",[1078,1847,1848],{"class":1092}," )",[1078,1850,1802],{"class":1092},[1078,1852,1805],{"class":1252},[1078,1854,1366],{"class":1092},[1078,1856,1857],{"class":1088}," a ",[1078,1859,1372],{"class":1092},[1078,1861,1862],{"class":1092}," ;\n",[918,1864,1865],{},"第二行就会少一些紧张感，更易阅读；但第三行又显得过于松散。因此我们建议以下的空格规范：",[1041,1867,1868,1881,1893,1902],{},[943,1869,1870,1871,979,1874,979,1877,1880],{},"单目运算符与它的操作数之间不要保留空格。比如 ",[956,1872,1873],{},"a++",[956,1875,1876],{},"!flag",[956,1878,1879],{},"check()"," ；",[943,1882,1883,1884,979,1887,979,1890,1880],{},"非逗号的双目运算符和三目运算符在操作数和运算符之间留一个空格。比如 ",[956,1885,1886],{},"a == b",[956,1888,1889],{},"3 + 5",[956,1891,1892],{},"cout \u003C\u003C endl",[943,1894,1895,1896,979,1899,1880],{},"逗号运算符和形\u002F实参列表中的逗号靠左，右侧留有空格（和英文书写规范相同）。比如 ",[956,1897,1898],{},"max(a, b)",[956,1900,1901],{},"int calculate(int, float, bool);",[943,1903,1904],{},"括号与表达式之间不必留有空格，句尾的分号也不用留空格。",[918,1906,1907],{},"另外，空行也可以让程序变得不那么难懂。你可以在全局变量与函数之间，函数与函数之间留下一行空行，可以让界限变得清晰。如果函数内部有一大块是在完整地做一件事情，也可以前后加一些空行突出，并用注释表明它们在做什么。",[922,1909,1910],{"id":1910},"大括号",[918,1912,1913],{},"“大括号换行”是编程届历史最悠久、持续时间最漫长的争议之一。因为这个问题，大家分成了两派：“换行派”认为左侧大括号{应当另起一行：",[1069,1915,1917],{"className":1071,"code":1916,"language":1073,"meta":1074,"style":1074},"if (condition)\n{\n    \u002F\u002F my code ...\n}\n",[956,1918,1919,1930,1935,1940],{"__ignoreMap":1074},[1078,1920,1921,1923,1925,1927],{"class":1080,"line":1081},[1078,1922,1363],{"class":1362},[1078,1924,1366],{"class":1092},[1078,1926,1369],{"class":1088},[1078,1928,1929],{"class":1092},")\n",[1078,1931,1932],{"class":1080,"line":1111},[1078,1933,1934],{"class":1092},"{\n",[1078,1936,1937],{"class":1080,"line":1135},[1078,1938,1939],{"class":1107},"    \u002F\u002F my code ...\n",[1078,1941,1942],{"class":1080,"line":1288},[1078,1943,1394],{"class":1092},[918,1945,1946],{},"而“不换行派”认为左侧大括号{应当接在上一行的末尾：",[1069,1948,1950],{"className":1071,"code":1949,"language":1073,"meta":1074,"style":1074},"if (condition) {\n    \u002F\u002F my code ...\n}\n",[956,1951,1952,1964,1968],{"__ignoreMap":1074},[1078,1953,1954,1956,1958,1960,1962],{"class":1080,"line":1081},[1078,1955,1363],{"class":1362},[1078,1957,1366],{"class":1092},[1078,1959,1369],{"class":1088},[1078,1961,1372],{"class":1092},[1078,1963,1375],{"class":1092},[1078,1965,1966],{"class":1080,"line":1111},[1078,1967,1939],{"class":1107},[1078,1969,1970],{"class":1080,"line":1135},[1078,1971,1394],{"class":1092},[918,1973,1974],{},"“换行派”认为换行之后，程序不会显得很“挤”，同时上下大括号的位置相同方便对应，称之为“良好的对齐”。而且对于按照总行数算绩效的企业，换行有助于获得更高的薪水。（当然这里是开玩笑，请不要为此这样做。）",[918,1976,1977],{},"“不换行派”认为不换行可以保证程序“单行入栈、单行出栈”，避免视觉上的冲断。它们认为将单独一行留给大括号是多余的。而且，大括号不换行在版本控制时可以获得相对更少的冲突。\n某些编程语言对于大括号是否换行给出了标准的规范。比如 Java 约定大括号不要换行，而 C# 却建议大括号另起一行。很不幸，C\u002FC++ 没有给出这方面的建议，因此你在独立编程时可以随意选择你的风格，甚至可以混用两种风格。",[918,1979,1980],{},"本书出于压缩篇幅的目的，大括号基本不换行。当然，你也会见到一些教材的大括号换行，甚至推荐读者使用某一种风格。这里，我想引用《C++ Primer》的一句话：“你追随那种风格并不重要，重要的是坚持一种风格走下去。”",[922,1982,1983],{"id":1983},"指针声明",[918,1985,1986],{},"我们已经知道了指针可以类似这样声明：",[1069,1988,1990],{"className":1071,"code":1989,"language":1073,"meta":1074,"style":1074},"int* ptr; \u002F\u002F 星号左对齐\n",[956,1991,1992],{"__ignoreMap":1074},[1078,1993,1994,1996,1999,2002,2004],{"class":1080,"line":1081},[1078,1995,1085],{"class":1084},[1078,1997,1998],{"class":1092},"*",[1078,2000,2001],{"class":1088}," ptr",[1078,2003,1104],{"class":1092},[1078,2005,2006],{"class":1107}," \u002F\u002F 星号左对齐\n",[918,2008,2009],{},"但其实还可以用这些方式声明:",[1069,2011,2013],{"className":1071,"code":2012,"language":1073,"meta":1074,"style":1074},"int *ptr;  \u002F\u002F 星号右对齐\nint * ptr; \u002F\u002F 星号居中\nint*ptr;   \u002F\u002F 不留空格\n",[956,2014,2015,2030,2043],{"__ignoreMap":1074},[1078,2016,2017,2019,2022,2025,2027],{"class":1080,"line":1081},[1078,2018,1085],{"class":1084},[1078,2020,2021],{"class":1092}," *",[1078,2023,2024],{"class":1088},"ptr",[1078,2026,1104],{"class":1092},[1078,2028,2029],{"class":1107},"  \u002F\u002F 星号右对齐\n",[1078,2031,2032,2034,2036,2038,2040],{"class":1080,"line":1111},[1078,2033,1085],{"class":1084},[1078,2035,2021],{"class":1092},[1078,2037,2001],{"class":1088},[1078,2039,1104],{"class":1092},[1078,2041,2042],{"class":1107}," \u002F\u002F 星号居中\n",[1078,2044,2045,2047,2049,2051,2053],{"class":1080,"line":1135},[1078,2046,1085],{"class":1084},[1078,2048,1998],{"class":1092},[1078,2050,2024],{"class":1088},[1078,2052,1104],{"class":1092},[1078,2054,2055],{"class":1107},"   \u002F\u002F 不留空格\n",[918,2057,2058],{},"这四种声明风格是完全等价的。事实上，除了最后一种，前三种风格都大有人用。其实这些风格代表了不同人对C\u002FC++ 这一语言中指针的理解。",[918,2060,2061,2064,2065,2068,2069,2071,2072,2075,2076,2078,2079,2083,2084,2087,2088,2090,2091,2094,2095,2098],{},[956,2062,2063],{},"int* ptr;"," 这种写法代表了 C++ 程序员对指针的理解。他们认为 ",[956,2066,2067],{},"int*"," 整体为 ",[956,2070,2024],{}," 的类型，因此声明的时候 ",[956,2073,2074],{}," int*"," 应该写在一起。他们的理解可以说是有道理的，因为只有 ",[956,2077,2067],{}," 合在一起才构成了 ",[2080,2081,2082],"em",{},"类型标识","，它能够出现在 ",[956,2085,2086],{},"reinterpret_cast"," 等场合中；剩下的 ",[956,2089,2024],{}," 就是单纯的名字，不包含任何其他的声明符成分。一些其他的面向对象语言也认同这种观念，如 C# 语言的数组声明形如 ",[956,2092,2093],{},"int[] arr;"," ，表明 ",[956,2096,2097],{},"int[]"," 是一个类型。即，C++ 程序员认为类型是更重要的，不能将一个独立的类型分开来写，也不能将它和名字混在一起。",[918,2100,2101,2104,2105,2107,2108,2111,2112,2114,2115,2117,2118,2121,2122,2125,2126,2128,2129,2121,2132,2125,2135,2137],{},[956,2102,2103],{},"int *ptr;"," 这种写法代表了 C 程序员对指针的理解。他们认为 ",[956,2106,1085],{}," 就是表达式 ",[956,2109,2110],{},"*ptr"," 的类型，因此 ",[956,2113,2024],{}," 就是一个可以解地址得到 ",[956,2116,1085],{}," 的类型。它们的理解也是有道理的，因为这符合 C 语言设计的初衷。C 语言认为指针、数组和函数的声明其实是在声明表达式——比如 ",[956,2119,2120],{},"int f(int, int);"," 是因为 ",[956,2123,2124],{},"f(1,1)"," 表达式的结果为 ",[956,2127,1085],{}," ； ",[956,2130,2131],{},"int arr[10];",[956,2133,2134],{},"arr[0]",[956,2136,1085],{}," 。复杂的数组指针、函数指针的声明方式也体现了这种思想。即，C 程序员认为表达式这一概念更重要，声明则是表达式的求解过程。",[918,2139,2140,2143,2144,2146,2147,2149,2150,2152],{},[956,2141,2142],{},"int * ptr;"," 这种写法代表了函数式泛型编程的观点。它们认为 ",[956,2145,1998],{}," 是作为一个模板类型别名，它接受一个类型，并转换为这个类型的指针。因此，它既不属于 ",[956,2148,2024],{}," 的“表达式的部分”，也不属于 ",[956,2151,1085],{}," 的类型的一部分。它们的理解也是有道理的。C++ 也支持这样的写法：",[1069,2154,2156],{"className":1071,"code":2155,"language":1073,"meta":1074,"style":1074},"template\u003Ctypename T>\nusing Pointer\u003CT> = T*;\n",[956,2157,2158,2174],{"__ignoreMap":1074},[1078,2159,2160,2163,2165,2168,2171],{"class":1080,"line":1081},[1078,2161,2162],{"class":1084},"template",[1078,2164,1441],{"class":1092},[1078,2166,2167],{"class":1084},"typename",[1078,2169,2170],{"class":1513}," T",[1078,2172,2173],{"class":1092},">\n",[1078,2175,2176,2179,2182,2184,2187,2190,2192,2194],{"class":1080,"line":1111},[1078,2177,2178],{"class":1429},"using",[1078,2180,2181],{"class":1088}," Pointer",[1078,2183,1441],{"class":1092},[1078,2185,2186],{"class":1088},"T",[1078,2188,2189],{"class":1092},">",[1078,2191,1468],{"class":1092},[1078,2193,2170],{"class":1088},[1078,2195,2196],{"class":1092},"*;\n",[918,2198,2199,2200,2203],{},"就可以使用 ",[956,2201,2202],{},"Pointer\u003Cint> ptr"," 这种声明。",[918,2205,2206],{},"因为 C++ 是一种“不限制程序员思维”的语言，它既继承了传统的 C 风格思想，又在面向对象、泛型编程、函数式编程有所拓展。所以说这三种方式都有它们的道理。本书为了加强读者对指针类型的理解，一律采用星号左对齐的写法。但是遇到函数指针和数组指针时，由于括号的限制，就不得不使用右对齐的写法了。但是，我们现在很少用到这两种指针，所以不必特别纠结。",[922,2208,2209],{"id":2209},"命名空间",[918,2211,2212,2215,2216,2219,2220,2222],{},[956,2213,2214],{},"using namespace std;"," 并不是良好的编程习惯。因为 ",[956,2217,2218],{},"std"," 命名空间中存在太多的声明，很容易与我们自定义的变量发生命名冲突。如果不使用 ",[956,2221,2214],{}," 的话，可以有以下两种写法：",[918,2224,2225,2226,2229],{},"一是对标准库的对象使用 ",[956,2227,2228],{},"std::"," 前缀：",[1069,2231,2233],{"className":1071,"code":2232,"language":1073,"meta":1074,"style":1074},"#include \u003Ciostream>\nint main() {\n    std::cout \u003C\u003C \"Hello, world!\" \u003C\u003C std::endl;\n}\n",[956,2234,2235,2249,2259,2293],{"__ignoreMap":1074},[1078,2236,2237,2240,2243,2247],{"class":1080,"line":1081},[1078,2238,2239],{"class":1362},"#include",[1078,2241,2242],{"class":1092}," \u003C",[1078,2244,2246],{"class":2245},"sfazB","iostream",[1078,2248,2173],{"class":1092},[1078,2250,2251,2253,2255,2257],{"class":1080,"line":1111},[1078,2252,1085],{"class":1084},[1078,2254,1488],{"class":1252},[1078,2256,1491],{"class":1092},[1078,2258,1375],{"class":1092},[1078,2260,2261,2263,2265,2268,2271,2274,2277,2280,2283,2286,2288,2291],{"class":1080,"line":1135},[1078,2262,1584],{"class":1513},[1078,2264,1587],{"class":1092},[1078,2266,2267],{"class":1088},"cout ",[1078,2269,2270],{"class":1092},"\u003C\u003C",[1078,2272,2273],{"class":1092}," \"",[1078,2275,2276],{"class":2245},"Hello, world!",[1078,2278,2279],{"class":1092},"\"",[1078,2281,2282],{"class":1092}," \u003C\u003C",[1078,2284,2285],{"class":1513}," std",[1078,2287,1587],{"class":1092},[1078,2289,2290],{"class":1088},"endl",[1078,2292,1473],{"class":1092},[1078,2294,2295],{"class":1080,"line":1288},[1078,2296,1394],{"class":1092},[918,2298,2299,2300,2302],{},"二是对经常需要的标准库对象，用 ",[956,2301,2178],{}," 引入：",[1069,2304,2306],{"className":1071,"code":2305,"language":1073,"meta":1074,"style":1074},"#include \u003Ciostream>\nusing std::cout;\nint main() {\n    cout \u003C\u003C \"Hello, world!\" \u003C\u003C std::endl;\n}\n",[956,2307,2308,2318,2331,2341,2364],{"__ignoreMap":1074},[1078,2309,2310,2312,2314,2316],{"class":1080,"line":1081},[1078,2311,2239],{"class":1362},[1078,2313,2242],{"class":1092},[1078,2315,2246],{"class":2245},[1078,2317,2173],{"class":1092},[1078,2319,2320,2322,2324,2326,2329],{"class":1080,"line":1111},[1078,2321,2178],{"class":1429},[1078,2323,2285],{"class":1513},[1078,2325,1587],{"class":1092},[1078,2327,2328],{"class":1088},"cout",[1078,2330,1473],{"class":1092},[1078,2332,2333,2335,2337,2339],{"class":1080,"line":1135},[1078,2334,1085],{"class":1084},[1078,2336,1488],{"class":1252},[1078,2338,1491],{"class":1092},[1078,2340,1375],{"class":1092},[1078,2342,2343,2346,2348,2350,2352,2354,2356,2358,2360,2362],{"class":1080,"line":1288},[1078,2344,2345],{"class":1088},"    cout ",[1078,2347,2270],{"class":1092},[1078,2349,2273],{"class":1092},[1078,2351,2276],{"class":2245},[1078,2353,2279],{"class":1092},[1078,2355,2282],{"class":1092},[1078,2357,2285],{"class":1513},[1078,2359,1587],{"class":1092},[1078,2361,2290],{"class":1088},[1078,2363,1473],{"class":1092},[1078,2365,2366],{"class":1080,"line":1529},[1078,2367,1394],{"class":1092},[918,2369,2370,2371,2373,2374,2376],{},"我这里并不是禁止使用 ",[956,2372,2214],{}," 的意思。在考试、竞赛等追求效率的场合当然可以使用；但是在一些项目的开发过程中，尤其是结构复杂、声明较多的项目，希望大家不要盲目 ",[956,2375,2214],{}," ，将命名空间的作用发挥好，避免冲突。",[2378,2379,2380],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":1074,"searchDepth":1081,"depth":1111,"links":2382},[2383,2387,2388,2389,2390,2391],{"id":924,"depth":1111,"text":924,"children":2384},[2385,2386],{"id":928,"depth":1135,"text":928},{"id":1036,"depth":1135,"text":1036},{"id":1349,"depth":1111,"text":1349},{"id":1635,"depth":1111,"text":1635},{"id":1910,"depth":1111,"text":1910},{"id":1983,"depth":1111,"text":1983},{"id":2209,"depth":1111,"text":2209},"md",null,{},{"icon":6},{"title":17,"description":17},"JYzdxtjUc71akC8HE755XCZW-9rFuoJYfDBIwetxgH0",[2399,2400],{"title":13,"path":14,"stem":15,"description":13,"icon":6,"children":-1},{"title":21,"path":22,"stem":23,"description":21,"icon":6,"children":-1},1784618087294]