C++函数笔记

函数的调用需要完成两项工作:

一、实参初始化对象的形参
二、将控制权交给函数,主调函数中断,被调函数运行。

函数的返回类型不能是数组。

数组不可以做函数返值的原因在于,函数的返值是赋值传递的,而数组不可以进行简单赋值。也就是函数的返回值是简单的临时变量方法,所以不支持是数组。
当然,函数不能返回函数,虽然不知道为什么,但是这样做值没有意义的。

应该尽可能使用引用传递从而避免拷贝。

再次探讨const

在传递参数的时候,参数的顶层const被忽略掉了。
因为使用一个非常量给常量赋值总是可以的。即我们可以使用一个非常量初始化一个底层const,但是反过来不行。不能使用一个底层const初始化一个非常量。

#include<bits/stdc++.h>
using namespace std;
int main(){
    const int *x=0;
    int *y=x;//不能用一个非常量初始化一个底层const
    return 0;
}
数组形参:

数组有两个性质:不允许拷贝数组,使用数组的时候可能会转化为指针。
所以我们使用一个数组的时候实际上使用的是数组的的指针。

使用函数作为形参
#include<bits/stdc++.h>
using namespace std;
void print(int (&a)[10]){  a[1]=9;}
int main(){
    //数组引用形参
    int a[10];
    print(a);
    cout<<a[1];
    return 0;
}

此外:无返回值void函数在最后一行隐式添加了一个return。

值是如何被返回的?

是通过建立一个临时变量,通过这临时变量返回的,所以不能返回局部对象的引用或者指针。

返回一个数组

返回数组可以通过指针,可以通过引用,但是也可以通过如下方式

#include<bits/stdc++.h>
using namespace std;
int a[10];
int (*tool())[10]{//如果没有括号返回的将是指针的数组,
    return &a;
}
int main(){
    //返回一个数组
    a[1]=2;
    for(int i=1;i<10;i++)a[i]=i;
    int (*p)[10]=tool();
    cout<<(*p)[1];//p指向一个数组,数组大小为10,10解引用之后是一个数组名字
    return 0;
}

或者使用decltype

using namespace std;
int a[10];
using ok=decltype(&a);
ok tool1(){
    return &a;
}
int main(){
    //返回一个数组
    a[1]=2;
    for(int i=1;i<10;i++)a[i]=i;
    int (*p)[10]=tool1();
    cout<<(*p)[1];//p指向一个数组,数组大小为10,10解引用之后是一个数组名字
    return 0;

constexpr 函数:函数约定:所有形参返回值必须是字面值类型(字面值类型并不是指就是const。),允许返回非常量。
但是如果非常量在使用过程中错误的被当做常量使用,编译器会报错。

在函数参数中内置类型的提升和转换带来的不可意料的转换。
小整形一般会直接提升为整型

#include<bits/stdc++.h>
using namespace std;
void f(int i){  cout<<"int";}
void f(short i){  cout<<"short";}
int main(){
    f('a');
    return 0;
}
//输出如下
//int
//Process returned 0 (0x0)   execution time : 0.059 s
//Press any key to continue.

算数类型转换的级别都一样,并没有优先级之分。

#include<bits/stdc++.h>
using namespace std;
void f(long i){  cout<<"long";}
void f(float i){  cout<<"float";}
int main(){
    f(3.14);//出现二义性错误
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值