随笔分类 - C++笔记
摘要:只要函数的返回类型不是 void ,则该函数的每条 return 语句必须返回一个值。 return 语句返回值的类型必须与函数返回类型相同,或者能隐式地转换成函数的其他类型的表达式将产生编译错误。 尽管C++无法确保结果的正确性,但是可以保证每个 return 语句的结果类型正确。编译器尽量确保具
阅读全文
摘要:没回返回值的 return 语句只能用在返回类型是 void 的函数中。返回 void 的函数不要求非得有 return 语句,因为在此类函数的最后一句后面会有隐式地执行 return 。 void 函数想在它的中间位置提前退出,可以使用 return 语句: 一个返回类型是 void 的函数也能使
阅读全文
摘要:return 语句终止当前正在执行的函数病将控制权返回到调用该函数的地方。 return 语句的两种形式: return ; return expression ;
阅读全文
摘要:为了编写能处理不同数量实参的函数,C++11新标准提供了两种主要的方法: 如果所有的实参类型相同,可以传递一个名为 initializer_list 的标准库类型。 如果实参的类型不同,我们可以编写可变参数模板。 initializer_list 形参 如果函数的实参数量未知但是全部实参的类型都相同
阅读全文
摘要:假定 main 函数位于可执行文件 prog 之内,向程序传递下面的选项: 通过两个可选的形参传递给 main 函数: 第一个形参argc表示数组中字符串的数量 第二个形参是数组 main 函数也可以定义成: 其中 argc 指向 char* 。 当实参传递给 main 函数之后,argv 的第一个
阅读全文
摘要:数组的两个特殊性质: 不允许拷贝数组 使用数组时会将其转换成指针 因为不能拷贝数组,所以无法以值传递的方式使用数组参数。 因为数组会被转换成指针,所以为函数传递一个数组时,实际上传递的是指向数组首元素的指针。 编译器处理对 print 函数的调用时,只检查传入的参数是否是 const int* 类型
阅读全文
摘要:顶层const作用于对象本身: 用实参初始化形参时会忽略形参的顶层const。当形参有顶层const时,传给它常量对象或者非常量对象都是可以的: 调用fcn函数时,既可以传入const int 也可以传入int。忽略形参的顶层const可能产生意想不到的结果: C++允许定义若干具有相同名字的函数,
阅读全文
摘要:对于引用的操作实际上是作用在引用所引的对象上: 使用引用形参,允许函数改变一个或多个实参的值。 改写reset程序,使其接受的参数是引用类型而非指针: 和其他引用一样,引用形参绑定初始化它的对象。当调用reset函数时,i绑定我们传给函数的int对象,此时改变i也就是改变i所引对象的值,被改变的对象
阅读全文
摘要:每次调用函数都会重新创建它的形参,并用传入的实参对形参进行初始化。 形参是引用类型,它将绑定到对应的实参上,否则,将实参的值拷贝后赋给形参。
阅读全文
摘要:初始化一个非引用类型的变量时,初始值被拷贝给变量,对变量的改动不会影响初始值: 函数对形参做的所有操作都不会影响实参,在fact函数内对变量val执行递减操作: 指针形参的行为与之类似: 调用reset函数之后,实参所指的对象被置为0,但是实参本身并没有改变:
阅读全文
摘要:为了允许编写程序时按照逻辑关系将其划分开,C++语言支持所谓的分离式编译。 分离式编译允许我们把程序分割到几个文件中去,每个文件独立编译。 编译和链接多个源文件 fact 函数的定义位于fact.cc的文件中,声明位于Chapter6.h的头文件中,factMain.cc的文件中创建main函数,m
阅读全文
摘要:类似于变量,函数只能定义一次,但可以声明多次。 函数的声明和函数的定义非常类似,唯一的区别是函数声明无须函数体,用一个分号替代即可。 因为函数的声明不包含函数体,所以也就无须形参的名字。写上形参的名字可以帮助使用者更好地理解函数的功能: 函数的三要素: 返回类型 类型名 形参类型 描述了函数的接口,
阅读全文
摘要:名字有作用域,对象有生命周期: 名字的作用域是程序文本的一部分,名字在其中可见。 对象的生命周期是程序执行过程中该对象存在的一段时间。 形参和函数体内部定义的变量统称为局部变量,仅在函数的作用域内可见,同时局部变量还会隐藏在外层作用域中同名的其他所有声明中。 自动对象 只存在于块执行期间的对象称为自
阅读全文
摘要:典型的函数定义: 包括返回类型、函数名字、由0个或多个形参组成的列表以及函数体。 形参以逗号隔开,形参的列表位于一对圆括号之内。 函数执行的操作在语句块中说明,该语句块成为函数体。 通过调用运算符来执行函数: 调用运算符的形式是一对圆括号,作用于一个表达式,该表达式时函数或者指向函数的指针。 圆括号
阅读全文
摘要:基本概念 C++定义了一元运算符和二元运算符: 作用于一个对象的运算符是一元运算符:取地址符(&)和解引用符(*) 作用于两个运算对象的运算符是二元运算符:相等运算符(==)和乘法运算符(*) 作用于三个运算对象的的三元运算符 一些符号既能作为医院运算符也能作为二元运算符: * 作为一元运算符时执行
阅读全文
摘要:当一个数组的元素仍然是数组时,通常使用两个维度来定义它:一个维度表示数组本身大小,另外一个维度表示其元素大小: 多维数组的初始化 允许使用花括号括起来的一组值初始化多维数组: 内层嵌套着的花括号并非必需的: 在初始化多维数组时也并非所有元素的值都必须包含在初始化列表之内: 其他未列出的元素执行默认初
阅读全文
摘要:对数组的元素使用取地址符就能得到指向该元素的指针: 编译器自动讲数组名字替换为一个指向数组首元素的指针: 当数组作为一个auto变量的初始值时,推断得到的类型是指针而非数组: 使用ia作为初始值执行初始化的过程: decltype(ia)返回的类型是由10个整数构成的数组: 指针也是迭代器 允许使用
阅读全文
摘要:数组下标定义为 size_t 类型,被设计得足够大以便能表示内存种的任意对象的大小,其他用法与vector基本类似: 使用范围for语句遍历数组的所有元素,输出所有的scores: 检查下标的值 下标应该大于等于0而且小于数组的大小。
阅读全文
摘要:数组的声明形式如 a[d],其中a是数组的数组的名字,d是数组的维度,维度说明数组中元素的个数,维度必须是一个常量表达式且大于0: 定义数组的时候必须指定数组的类型,不允许用auto关键字由初始值的列表推断类型 数组的元素应为对象,不存在引用的数组 显式初始化数组元素 字符数组的特殊性 用字符串字面
阅读全文
摘要:迭代器的算数运算 vector对象中间位置的元素: 参与比较的两个迭代器必须合法而且指向的是同一个容器的元素,it和mid是同一个vector对象的两个迭代器,比较它们所指位置孰前孰后: 两个迭代器指向的是同一个容器中的愿随或者尾元素的下一个位置,相减所得是两个迭代器的距离。 距离指的是右侧的迭代器
阅读全文

浙公网安备 33010602011771号