《C++ Primer 第五版》(第6.1~6.3节) 函数形参和实参传递,可变参数列表和函数返回值

1.函数形参和实参传递问题

          函数参数传递有两种:值传递(变量,指针),引用传递(使用别名)。

          在形参和实参的传递过程中,牵涉到大的类类型对象、容器类型对象或者不支持拷贝操作的对象时,不适合采用值传递,应使用引用传递的方式。另外,实参形参传递的过程中,系统会忽略形参的顶层引用(可用变量赋值给常量形参,可以变量指针赋值给常量指针),因此不能使用顶层const来作为函数重载的判断依据。

          如果函数中没有修改变量的行为,可以将变量前添加const.

          对于数组(性质:不允许数组拷贝,退化为指针)做函数的形参时,会退化为指向首元素的指针,多维数组会退化为数组指针(int matrix[2][3]--->int (*matrix)[3])。退化后,数组长度会被掩盖,可以采用四种方法来得到数组的长度,1)数组有特定的标记结尾,如C风格字符串;2)利用数组的两个库函数begin()和end();3)显示指定大小;4)定义一个指向数组的引用,如 int (&arry)[10}.

2.可变参数列表

          可变参数列表表示在函数调用之前不知道实参的个数。针对这种情况,C++提供了三种解决办法:

                (1)当形参中的参数类型一致,采用initializer_list(同名头文件)的标准库类型,对象中的类型为常量,可用列表初始化初始,头文件中定义了默认/列表初始化,拷贝/赋值运算,size(),begin(),end()等成员函数。initializer_list<int>v1{1,2,3};

                  (2)参数类型不一致,采用可变参数模板

                (3)采用省略符,目的是为了兼容C接口,如C语言中的printf函数。具体格式如下:

                              void foo(para_list,...);              void foo(...);

3.函数返回值

          不要返回局部对象的引用或者指针,因为局部对象在结束调用之后,会发生析构。

          函数的返回类型决定函数是否可以做左值,如果返回的是引用,则可以作为左值

          函数返回值可以是花括号包围的值的列表,用于函数返回值的临时量初始化。如果返回值为内置类型,列表中最多一个值,且sizeof(列表)<=sizeof(返回值类型),如果返回值是类类型,则由类决定。

          运行main()函数无函数返回值,系统会隐式添加,其他函数都需要有返回值(除void).返回值可以函数本身的一个调用(递归),main()函数不允许递归。

         

           

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

461. 汉明距离 golang

Me 异或取出1的个数求取异或后1的个数返回 func hammingDistance(x int, y int) int {x x ^ yvar count 0for x ! 0 {x x & (x - 1)count}return count }

《C++ Primer 第五版》(第6.3~6.7节)——返回指向数组/函数的指针,函数重载,默认形参、inline函数和constexpr函数

1.返回指向数组/函数的指针 顾名思义&#xff0c;就是函数返回值为指向数组/函数的指针。 数组的性质&#xff1a;不能被拷贝&#xff0c;函数也不能返回数组。但可以返回数组指针/引用&#xff0c;声明一个返回数组指针的函数&#xff0c;有四种方式&#xff0c;一种是直接声明…

136. 只出现一次的数字 golang

Me 1. 先排序就好做了 执行用时 :16 ms, 在所有 Go 提交中击败了27.90%的用户 内存消耗 :4.7 MB, 在所有 Go 提交中击败了100.00%的用户func singleNumber(nums []int) int {sort.Ints(nums)for i:0; i < len(nums); i {if i len(nums) - 1 {return nums[i]}if nums[i] …

《C++ Primer 第五版》(第1~6章总结)

1.C采用标准库文件iostream定义的两个对象来实现IO机制。 2.代码注释应解释关键数据的变量含义和代码完成了什么功能&#xff0c;力求简洁易懂。 3.正确理解初始化和赋值&#xff0c;声明和定义的含义&#xff1f;初始化是在定义对象的时候同时赋值&#xff0c;赋值是定义对象…

268. 缺失数字 golang

Me 首项加末项乘以项数/2.就是总和。然后剪掉nums里面的数组和 func missingNumber(nums []int) int {var sum intlens : len(nums)for _, value : range nums {sum value}return ((1 lens) * lens) / 2 - sum }

使用touch更新文件的时间

#&#xff01;/bin/bashfunction read_dir() {for file in ls $1doif[-d $1"/"$file]thenread_dir $1"/"$fileelseecho $1"/"$filetouch $1"/"$filefidone }read_dir ./

231. 2的幂 golang

Me func isPowerOfTwo(n int) bool {return n > 0 && (n & (n-1)) 0 }

linux/windows上STM32固件烧写工具的开发demo

1.主要实现功能&#xff1a;完成对HEX和DFU文件的烧写&#xff0c;显示烧写的进度等功能 2.开发工具:Qt creator4.9.0 3.开发系统平台&#xff1a;windows系统和linux系统两套平台 4.具体开发步骤&#xff1a; 1&#xff09;设计整体的界面&#xff0c;包括文件选择界面(dfu和h…

338. 比特位计数 golang

Me func countBits(num int) []int {result : make([]int, num1)for i:0; i<num; i {result[i] numberOne(i)}return result }func numberOne(x int) int {if x 0 {return 0}var count intfor x ! 0 {x x & (x - 1)count}return count }

Qt使用qss文件管理stylesheet

内容总结简介&#xff1a; 1&#xff09;使用.qss后缀的文件来管理Qt中每个类的具体组件的stylesheet设置。 2&#xff09;在类中使用具体.qss文件中的设置。 3&#xff09;解决控件中多个相同组件不同设置或者同一个控制不同子控制或者伪状态的问题。 1.新建后缀名为.qss的文…

283. 移动零golang

Me 遍历所有数组&#xff0c;统计0的个数倒着把零写入数组末尾 func moveZeroes(nums []int) {var count, j intfor _, key : range nums {if key 0 {count} else{nums[j] keyj}}for i:len(nums) - count; i < len(nums); i {nums[i] 0} }最优解(快慢指针) 减少了数组…

QT自定义MainWindow

1.开发环境&#xff1a;Qt 4.7.3 MinGW 32bit (MSVC2015 32bit) 2.实现大纲&#xff1a; 1&#xff09;自定义边框&#xff0c;标题栏&#xff0c;工具栏&#xff0c;内容栏&#xff0c;状态栏&#xff08;后面三个代码中没有实现实现&#xff09; 2&#xff09;重写鼠标事件…

485. 最大连续1的个数 golang

Me func findMaxConsecutiveOnes(nums []int) int {max : 0for i,j : 0, -1; i < len(nums); i {if nums[i] 0 {j i} else {if max < i -j {max i - j}}}return max }

QTextEdit实现图片和文本同行显示

1.开发环境&#xff1a;Qt 4.7.3 MinGW 32bit (MSVC2015 32bit) 2.实现大纲&#xff1a; 1&#xff09;实现图片和文本在同一行显示&#xff0c;且能够设置字体大小和颜色 2&#xff09;能够手动设置行的宽度和间距 3&#xff09;设置字体样式&#xff0c;然后添加图片&#…

3. 无重复字符的最长子串 golang

官解 func lengthOfLongestSubstring(s string) int {n : len(s)ans : 0subMap : make(map[byte]int)for i, j : 0, 0; j < n; j {if v, ok : subMap[byte(s[j])]; ok {if i < v {i v}}if ans < (j - i 1) {ans j - i 1}subMap[byte(s[j])] j 1}return ans }

QQuickWidget + QML编程实现酷炫动态动画效果

1.具体需求&#xff1a;当Qt开发项目中需要实现简单的动态酷炫动画效果时&#xff0c;我们可以使用Qt中的QQuickWidget来实现&#xff0c;同时还可以使用QML编程来实现具体的动画效果&#xff0c;具体实现的效果如下所示&#xff1a; 2.具体操作和实现效果图&#xff1a; 1&am…

Qt中的四种信号与槽的连接方式

1. UI界面右键点击控件&#xff0c;选择“转到槽“&#xff0c;系统会在cpp中自动添加这个组件对应的槽函数 2.在Ui界面的下面 siga如l & slot editor栏中手动添加 3.在代码中使用connect显示添加 4. 使用on_对象名_事件名隐式连接&#xff0c;以QPushButton为例 QPushBut…

20. 有效的括号 golang 堆栈

借用arraystack的包完成 import "github.com/emirpasic/gods/stacks/arraystack"func isValid(s string) bool {stack : arraystack.New()for _, c : range s {if c ( {stack.Push())} else if c [ {stack.Push(])} else if c { {stack.Push(})} else {if stack.…

215. 数组中的第K个最大元素 golang

Me func findKthLargest(nums []int, k int) int {sort.Ints(nums)return nums[len(nums)-k] }golang实现快排和冒泡排序 1. bubbleSort // method2 func swap(a *int, b *int) {temp : *a*a *b*b temp }func bubbleSort(nums []int) {for i:0; i < len(nums); i {for…

Qt实现对json文件的解析

json是一种轻量级的数据结构&#xff0c;其内部的结构是一种键值对(key-value)的组合&#xff0c;最外层是{ }。key是带双引号的字符串常亮&#xff0c;用于获取和存储&#xff1b;value的值可以是bool变量&#xff0c;字符串常量&#xff0c;对象或数组(也是一个key-value的组…