在C++中,函数参数默认值为什么不允许为局部变量呢??

如题所述

因为程序在运行时才会给程序中定义的变量开辟内存空间和进行初始化,函数是在被调用的时候才会给形参和函数体内定义的变量开辟内存空间,带有默认形参的函数在给形参开辟空间后就回先把默认值赋给形参,若没有实参传递,形参值就是默认值,默认值必须是系统能确切找得到的值才能进行对带有默认值形参进行初始化,而局部变量不是在正在被调用的函数内定义的(形参是函数一开始就定义的)或者在其他函数内定义并被使用完就被释放掉了,因此系统就会找不到一个确切的值赋给形参,所以函数参数默认值不允许为局部变量。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-16
局部变量是你函数调用之后,才会被构造出来,而函数参数的值的存在,是在调用函数的时候就必须存在。一个是函数调用之后才存在,一个是函数调用之时就存在,你说,参数默认参数怎么能为局部变量呢!
第2个回答  2012-12-11
有些乱, 既然是局部变量就是在函数内部的, 只有程序运行到这个变量定义处才会对其初始化。
而你函数的默认参数。。。
根本没什么关系的。
第3个回答  2012-12-11
所谓默认值就是一个默认的常量值,常量值当然不能是变量了。
第4个回答  2012-12-11
什么意思 都默认了肯定要是一个定值 局部变量肯定不是定值

在C++中,函数参数默认值为什么不允许为局部变量呢??
因为程序在运行时才会给程序中定义的变量开辟内存空间和进行初始化,函数是在被调用的时候才会给形参和函数体内定义的变量开辟内存空间,带有默认形参的函数在给形参开辟空间后就回先把默认值赋给形参,若没有实参传递,形参值就是默认值,默认值必须是系统能确切找得到的值才能进行对带有默认值形参进行初始...

关于C++全局变量和局部变量的问题!!
局部变量:在一个函数内部定义的变量就是局部变量。作用范围:只局限在定义它的本函数体之内,即只有在该函数体内才能使用该变量,而在此函数之外是不能使用它们的。由于在不同函数体内定义的变量只在它所在的函数体内部有效,所以,不同函数体中可以定义相同名字的变量,但它们代表不同的对象,互不干扰。

c++ int类型默认值是多少?
1、局部变量。局部变量在没有显式初始化时,其值C语言规范没做要求,可以是随机值,也可以是编译器随意给定的值。比如gcc编译器的局部变量就是随机值,可能为任何值。而微软的编译器,如VC或VS,则会初始化为全c,即0xCCCCCCCC。2、全局变量或静态局部变量。所有的全局变量,即定义在函数外的变量,...

C++中,类内的成员变量自动初始化为零吗,而全局变量随意赋值
如果该对象是全局的话,其成员中的内置类型就会自动初始化对应的默认值(像整形就为0)和调用构造函数初始化,如果是局部的话只会调用默认构造函数赋值,构造函数中没有涉及到的成员,并不会赋值。

C++中函数中的局部变量到底是不是执行到变量定义处才分配内存吗,为什么...
C语言C++语言的局部非静态变量或者局部非静态对象在函数开始执行的时候就分配好了内存空间,但是在到达对象或者变量的定义点之前,是不能对其进行引用的。对于局部非静态对象,构造函数只有到定义点才调用。这些都是实现细节,不是C++标准定义的,所以不同的编译器和系统可能有所不同的实现。在C++语言中,...

为什么全局变量无须初始化,局部变量必须初始化
全局变量有时也需要初始化,而局部变量其实大部分时间都没有初始化。不要把赋初值与初始化混淆了:初始化是由编译器做的,形成可执行文件后,那些变量的值就在软件文件中放着,执行程序时直接使用了;而赋初值是由C\/C++代码实现的,程序开始执行后才给变量赋的值。只是全局变量如果不显式初始化,那么...

C++里bool变量如不初始化的话默认值是什么
C++里变量未初始化的默认值要看变量的存储类型。一般来说局部变量未初始化,其默认值不确定,全局变量未初始化时,默认值一般为为。java里默认是false,C++里没有规定,所以依赖编译器实现,不要让编译器决定你的默认值,永远初始化。例如:boolg_a;\/\/全局变量默认初始化为false即0voidf(){\/\/未...

C++语言的基本语法规则
虽然内联函数省时省空间,但是编译器不一定准许函数的内联请求,当C++编译器不允许内联请求时会将内联函数当做普通函数处理。默认参数: C++中可以在函数声明时为参数提供一个默认值,当函数调用时没有提供这个参数的值,编译器会自动用默认值代替。但是在函数定义时就不在指定默认参数值。默认参数有如下...

C++中局部变量一定要初始化吗,为什么?
可以不初始化,但是在后续的过程中,一旦需要使用这个变量,一定要记得先初始化,所以在声明时就初始化是个好习惯,也是值得提倡的做法

函数的形参都属于全局变量吗
要看你定义的位置

相似回答