当前位置:首页 » 编程软件 » 的默认参数值必须为编译时常量

的默认参数值必须为编译时常量

发布时间: 2022-03-09 11:46:00

Ⅰ 在java中,方法里的自变量,有没有默认值

没有,如果你不传参进去,调用的就是f()方法,你可以写一个f()方法,提供默认的int值

Ⅱ 默认参数的用法

c语言中没有参数默认值的概念,可以利用宏来模拟参数默认值;
在C++中,可以为参数指定默认值。在函数调用时没有指定与形参相对应的实参时, 就自动使用默认参数。
默认参数的语法与使用:
(1)在函数声明或定义时,直接对参数赋值。这就是默认参数;
(2)在函数调用时,省略部分或全部参数。这时可以用默认参数来代替。
注意:
(1)默认参数只可在函数声明中设定一次。只有在无函数声明时,才可以在函数定义中设定。
(2)默认参数定义的顺序为自右到左。即如果一个参数设定了缺省值时,其右边的参数都要有缺省值。
如:int mal(int a, int b=3, int c=6, int d=8) 正确,按从右到左顺序设定默认值。
int mal(int a=6, int b=3, int c=5, int d) 错误,未按照从右到左设定默认值。c设定缺省值了,而其右边的d没有缺省值。
(3)默认参数调用时,则遵循参数调用顺序,自左到右逐个调用。这一点要与第(2)分清楚,不要混淆。
如:void mal(int a, int b=3, int c=5); //默认参数
mal(3, 8, 9 ); //调用时有指定参数,则不使用默认参数
mal(3, 5); //调用时只指定两个参数,按从左到右顺序调用,相当于mal(3,5,5);
mal(3); //调用时只指定1个参数,按从左到右顺序调用,相当于mal(3,3,5);
mal( ); //错误,因为a没有默认值
mal(3, , 9) //错误,应按从左到右顺序逐个调用(调用实参,即,实参必须是连续的)
再如: void mal(int a=8, int b=3, int c=5); //默认参数
mal( ); //正确,调用所有默认参数,相当于mal(8,3,5);
(4)默认值可以是全局变量、全局常量,甚至是一个函数。但不可以是局部变量。因为默认参数的调用是在编译时确定的,而局部变量位置与默认值在编译时无法确定。

Ⅲ C# 对于实体对象 参数默认值 怎么设置

你用的是.net4.0的框架么?命名参数
public static void Debug(string message="aaa")
{
}
这种写法是可以的。但是传对象的话,4.0应该还不支持吧。
想让对象有默认值,只需要在get,set的时候,给它设置一个默认值就可以了

Ⅳ C语言中定义int变量,默认值是多少

如果是定义的全局变量或者静态变量,未初始化的话就是0.如果是局部变量,那就是以前残留在堆栈里的随机值。

区分变量的类型,有两种情况。

1、局部变量。

局部变量在没有显式初始化时,其值C语言规范没做要求,可以是随机值,也可以是编译器随意给定的值。

比如gcc编译器的局部变量就是随机值,可能为任何值。而微软的编译器,如VC或VS,则会初始化为全c,即0xCCCCCCCC。

2、全局变量或静态局部变量。

所有的全局变量,即定义在函数外的变量,默认值为0。

所有的静态局部变量,即定义在函数内部的static int name形式的,默认初始化为0。

(4)的默认参数值必须为编译时常量扩展阅读:

int是一种数据类型,在编程语言(C、C++、C#、Java等)中,是用于定义整数类型变量的标识符。

目前在一般的电脑中,int占用4字节,32比特,数据范围为-2147483648~2147483647[-2^31~2^31-1]

在之前的微型机中,int占用2字节,16比特,数据范围为-32768~32767[-2^15~2^15-1]

定义方法:

inti;//定义整形变量i

inti=1;//定义整形变量i并初始化为1

定义常量:

constinti;//编译错误,因为常量需要给予一个初值

constinti=1;//定义常量i,值为1

Java定义常量:

finalinti=1;//定义常量i,值为1

Ⅳ C的函数中的static变量初始值一定要是常量

是的,static变量初始值一定要是常量。
static变量中文名叫静态变量。它与普通的变量比起来有如下几个区别:
1)位置:静态局部变量被编译器放在全局存储区.data,所以它虽然是局部的,但是在程序的整个生命周期中存在。
2)访问权限:静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问。
3)值:静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。这个比较好理解,每次函数调用静态局部变量的时候都修改它然后离开,下次读的时候从全局存储区读出的静态局部变量就是上次修改后的值。

Ⅵ C++ void *pReserved=NULL 用C#怎么写

IntPtr pReserved = IntPtr.Zero;

Ⅶ C# 函数参数默认值问题

C# 有2种不同的常量定义方式:编译时常量(compile-time) 和运行时常量(runtime)。所谓编译时常量,是以 const关键字定义,所谓编译时是常量则以readonly关键字定义。

C# 规定参数的默认值必须是编译时能确定的常量值。

这些参数的类型可以是 C# 认定的基元类型。还可以包括枚举类型,以及能设为 null 的任何引用类型。

Color 这个枚举类属于运行时常量。

如果硬要写一个带默认值的函数,只能利用重写的方法,例如:

privatevoidPrint(stringmessage)
{
Colorcolor=Color.White;
}

privatevoidPrint(stringmessage,Colorcolor)
{
}

【附】C# 基元类型:

sbyte / byte / short / ushort /int / uint / long / ulong / char / float / double / bool / decimal /object / string

Ⅷ c语言中形参的缺省存储类别是

c语言中形参或者说所有的变量,缺省的存储类别都是auto的。C语言中四种存储类别:auto、static、extern、register 。

其中大部分均为auto,auto为默认的类别,一般未标明的都是auto;如果标明了哪种类别,那就按标明的来。

(8)的默认参数值必须为编译时常量扩展阅读:

形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。

没有形参的函数在形参表的位置应该写int main(void) 函数也可以有形参和返回值,其形参也称为命令行参数,由操作系统在启动程序时初始化,其返回值传递给操作系统。

形参的特点:

1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。

2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。

4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。

Ⅸ 创建存储过程问题

分开2个Command执行啊....
变通下嘛....先用一个Command执行Use database
再执行create proc不就完了吗?

Ⅹ Flash ActionScript3 function的问题

帮助中如是说:
按值或按引用传递参数
在许多编程语言中,一定要了解按值传递参数与按引用传递参数之间的区别,二者之间的区别会影响代码的设计方式。
按值传递意味着将参数的值复制到局部变量中以便在函数内使用。按引用传递意味着将只传递对参数的引用,而不传递实际值。这种方式的传递不会创建实际参数的任何副本,而是会创建一个对变量的引用并将它作为参数传递,并且会将它赋给局部变量以便在函数内部使用。局部变量是对函数外部的变量的引用,它使您能够更改初始变量的值。
在 ActionScript 3.0 中,所有的参数均按引用传递,因为所有的值都存储为对象。但是,属于基元数据类型(包括 Boolean、Number、int、uint 和 String)的对象具有一些特殊运算符,这使它们可以像按值传递一样工作。例如,下面的代码创建一个名为 passPrimitives() 的函数,该函数定义了两个类型均为 int、名称分别为 xParam 和 yParam 的参数。这些参数与在 passPrimitives() 函数体内声明的局部变量类似。当使用 xValue 和 yValue 参数调用函数时,xParam 和 yParam 参数将用对 int 对象的引用进行初始化,int 对象由 xValue 和 yValue 表示。因为参数是基元值,所以它们像按值传递一样工作。尽管 xParam 和 yParam 最初仅包含对 xValue 和 yValue 对象的引用,但是,对函数体内的变量的任何更改都会导致在内存中生成这些值的新副本。
function passPrimitives(xParam:int, yParam:int):void
{
xParam++;
yParam++;
trace(xParam, yParam);
}

var xValue:int = 10;
var yValue:int = 15;
trace(xValue, yValue); // 10 15
passPrimitives(xValue, yValue); // 11 16
trace(xValue, yValue); // 10 15

在 passPrimitives() 函数内部,xParam 和 yParam 的值递增,但这不会影响 xValue 和 yValue 的值,如上一条 trace 语句所示。即使参数的命名与 xValue 和 yValue 变量的命名完全相同也是如此,因为函数内部的 xValue 和 yValue 将指向内存中的新位置,这些位置不同于函数外部同名的变量所在的位置。
其它所有对象(即不属于基元数据类型的对象)始终按引用传递,这样您就可以更改初始变量的值。例如,下面的代码创建一个名为 objVar 的对象,该对象具有两个属性:x 和 y。该对象作为参数传递给 passByRef() 函数。因为该对象不是基元类型,所以它不但按引用传递,而且还保持一个引用。这意味着对函数内部的参数的更改将会影响到函数外部的对象属性。
function passByRef(objParam:Object):void
{
objParam.x++;
objParam.y++;
trace(objParam.x, objParam.y);
}
var objVar:Object = {x:10, y:15};
trace(objVar.x, objVar.y); // 10 15
passByRef(objVar); // 11 16
trace(objVar.x, objVar.y); // 11 16

objParam 参数与全局 objVar 变量引用相同的对象。正如在本示例的 trace 语句中所看到的一样,对 objParam 对象的 x 和 y 属性所做的更改将反映在 objVar 对象中。
默认参数值

ActionScript 3.0 中新增了为函数声明"默认参数值"的功能。如果在调用具有默认参数值的函数时省略了具有默认值的参数,那么,将使用在函数定义中为该参数指定的值。所有具有默认值的参数都必须放在参数列表的末尾。指定为默认值的值必须是编译时常量。如果某个参数存在默认值,则会有效地使该参数成为"可选参数"。没有默认值的参数被视为"必需的参数"。
例如,下面的代码创建一个具有三个参数的函数,其中的两个参数具有默认值。当仅用一个参数调用该函数时,将使用这些参数的默认值。
function defaultValues(x:int, y:int = 3, z:int = 5):void
{
trace(x, y, z);
}
defaultValues(1); // 1 3 5

arguments 对象

在将参数传递给某个函数时,可以使用 arguments 对象来访问有关传递给该函数的参数的信息。arguments 对象的一些重要方面包括:
arguments 对象是一个数组,其中包括传递给函数的所有参数。
arguments.length 属性报告传递给函数的参数数量。
arguments.callee 属性提供对函数本身的引用,该引用可用于递归调用函数表达式。
注意 如果将任何参数命名为 arguments,或者使用 ...(rest) 参数,则 arguments 对象不可用。
在 ActionScript 3.0 中,函数调用中所包括的参数的数量可以大于在函数定义中所指定的参数数量,但是,如果参数的数量小于必需参数的数量,在严格模式下将生成编译器错误。您可以使用 arguments 对象的数组样式来访问传递给函数的任何参数,而无需考虑是否在函数定义中定义了该参数。下面的示例使用 arguments 数组及 arguments.length 属性来输出传递给 traceArgArray() 函数的所有参数:
function traceArgArray(x:int):void
{
for (var i:uint = 0; i < arguments.length; i++)
{
trace(arguments[i]);
}
}

traceArgArray(1, 2, 3);

// 输出:
// 1
// 2
// 3

arguments.callee 属性通常用在匿名函数中以创建递归。您可以使用它来提高代码的灵活性。如果递归函数的名称在开发周期内的不同阶段会发生改变,而且您使用的是 arguments.callee(而非函数名),则不必花费精力在函数体内更改递归调用。在下面的函数表达式中,使用 arguments.callee 属性来启用递归:
var factorial:Function = function (x:uint)
{
if(x == 0)
{
return 1;
}
else
{
return (x * arguments.callee(x - 1));
}
}

trace(factorial(5)); // 120

如果您在函数声明中使用 ...(rest) 参数,则不能使用 arguments 对象,而必须使用为参数声明的参数名来访问参数。
还应避免将 "arguments" 字符串作为参数名,因为它将遮蔽 arguments 对象。例如,如果重写 traceArgArray() 函数,以便添加 arguments 参数,那么,函数体内对 arguments 的引用所引用的将是该参数,而不是 arguments 对象。下面的代码不生成输出结果:
function traceArgArray(x:int, arguments:int):void
{
for (var i:uint = 0; i < arguments.length; i++)
{
trace(arguments[i]);
}
}

traceArgArray(1, 2, 3);

// 无输出

在早期的 ActionScript 版本中,arguments 对象还包含一个名为 caller 的属性,该属性是对当前函数的引用。ActionScript 3.0 中没有 caller 属性,但是,如果您需要引用调用函数,则可以更改调用函数,以使其传递一个额外的参数来引用它本身。

热点内容
樱花动漫盾之勇者成名录缓存 发布:2025-01-22 09:14:11 浏览:564
图色模拟脚本是什么 发布:2025-01-22 09:09:04 浏览:164
怎么重置银行卡密码 发布:2025-01-22 09:07:18 浏览:334
哪个平台云服务器好用 发布:2025-01-22 09:07:16 浏览:476
编程猫审判 发布:2025-01-22 08:54:17 浏览:142
明日之后怎么加不同服务器好友 发布:2025-01-22 08:51:08 浏览:206
php代码格式化 发布:2025-01-22 08:50:22 浏览:180
db2plsql 发布:2025-01-22 08:19:10 浏览:779
猪猪侠脚本没反应 发布:2025-01-22 08:08:37 浏览:812
赛博朋克跟永劫无间哪个配置高 发布:2025-01-22 08:07:07 浏览:535