c中static和const有什么区别

2021-03-05 10:44:19 字数 5399 阅读 1163

1楼:匿名用户

们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。

二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。

明白了这个本质区别,我们就不难看出下面的语句中static readonly和const能否互换了:

1. static readonly myclass myins = new myclass();

2. static readonly myclass myins = null;

3. static readonly a = b * 20;

static readonly b = 10;

4. static readonly int constintarray = new int ;

5. void somefunction()

1:不可以换成const。new操作符是需要执行构造函数的,所以无法在编译期间确定

2:可以换成const。我们也看到,reference类型的常量(除了string)只能是null。

3:可以换成const。我们可以在编译期间很明确的说,a等于200。

4:不可以换成const。道理和1是一样的,虽然看起来1,2,3的数组的确就是一个常量。

5:不可以换成readonly,readonly只能用来修饰类的field,不能修饰局部变量,也不能修饰property等其他类成员。

2楼:匿名用户

static 是静态的修饰符,const是定义常量的修饰符.

const和static const的区别

3楼:枫玺

const和static const的区别:

一、全局的区别

const规定变量在全局中是只读的变量,并且它的值无法被修改。

static const规定变量在当前的模块中是只读的变量,无法再全局中被其他模块读取。

二、文件的区别

const定义的指针,不赋初值编译时不报错,在初始化时应说明指针的指向。

static const不能在定义对象时对变量初始化,就是不能用构造函数来初始化。

三、函数的区别

const只能通过构造函数初始化列表进行,并且必须有构造函数。

static const是静态的,属于类的静态成员函数。

四、类的区别

const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同,所以不能在类声明中初始化const数据成员。

static const初始化在类体外进行,初始化时不加该成员的访问权限控制符private,public等,并且初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

4楼:匿名用户

对于c/c++语言来讲,

const就是只读的意思,只在声明中使用;

static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;

对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见.

static const 应该就是上面两者的合集.

下面分别说明:

全局:const,只读的全局变量,其值不可修改.

static,规定此全局变量只在当前模块(文件)中可见.

static const,既是只读的,又是只在当前模块中可见的.

文件:文件指针可当作一个变量来看,与上面所说类似.

函数:const,返回只读变量的函数.

static,规定此函数只在当前模块可见.

类:const,一般不修饰类,(在vc6.0中试了一下,修饰类没啥作用)

static,c++中似乎没有静态类这个说法,一般还是拿类当特殊的变量来看.c#中有静态类的详细说明,且用法与普通类大不相同.

5楼:

const 是常量, 也就是只读的, 是一个"右值"

比如 const int iret = 2 ;

iret = 3 ; // 这句是错的, const类型只能在初始化的时候赋值, 之后不能改变

static称为静态变量, static有两种, 一种是在类的成员变量中, 一种是局部变量或全局变量.

在类中的, 用**解释

class exp ;

int main()

类中的static变量的意思是, 在这个类的所有实例中的值都是一样的, 它与const不同, const 只是只读, 在其他方面与不带const的变量没什么区别

还有一种是const全局变量或局部变量, 这两种是相同的, 局部变量的作用域会和全局变量相同

上**:

static int i1 ;

int add(int a, int b)

void main()

还有几点static的特点,(适用于static全局变量或局部变量)

1.static变量在全局数据区分配内存, 也就是 在生成的可执行文件中占一定空间, 这点与全局变量相同

2.static变量只在它所在的源文件中可用. 如果一个项目有很多 .

c或者.cpp文件, static变量可以出现在每一个文件中, 而他们却是不同的, static可以解决许多文件中变量 名字相同的问题.

6楼:高金山

没有static const写法的!

static作用:

1限制范围(函数,变量只能在本文件中使用)2设定变量存储区域(静态存储区域)

const作用:

声明常量,它不能被修改,它存放在常量区

7楼:

static为静态修饰符,可以放在对象前面(函数也是一种对象)如:

class example

} 可直接example.show();去调用这个方法而不用实例化当然也可以定义静态的属性:

public static string str="hello";

但如果这样example.str="helloworld";就出现问题了

也就是客户端可以在任何地方去改变str的值。这样的话极容易产生错误,因为str的值是依靠example类的,随时可以改变。比如再声明一个类:

class class1 }

class example

} 要防止str值发生改变,就需要用到const修饰符public const string str="hello";//str被称为常量

这是如果再对example.str赋值,则编译器将产生错误用常量来保存公共数据是最为合适的。

8楼:匿名用户

const和static const的区别: 多了一个static

static作用:1限制范围(函数,变量只能在本文件中使用)

2设定变量存储区域(静态存储区域)

9楼:匿名用户

这种问题到书中找答案

c#中static和const有什么区别?

10楼:和屋昂黄

static 是静态的修饰符,const是定义常量的修饰符;

const就是只读的意思,只在声明中使用;

static一般有2个作用,规定作用域和存储方式。对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;

对于全局变量,如果以文件划分作用域的话。此变量只在当前文件可见;

对于static函数也是在当前模块内函数可见。

static为静态修饰符,可以放在对象前面(函数也是一种对象)如:

class example}

可直接example.show();去调用这个方法而不用实例化

当然也可以定义静态的属性:

public static string str="hello";

但如果这样example.str="helloworld";就出现问题了

也就是客户端可以在任何地方去改变str的值。这样的话极容易产生错误,因为str的值是依靠

example类的,随时可以改变。比如再声明一个类:

class class1

}class example

}要防止str值发生改变,就需要用到const修饰符

public const string str="hello";//str被称为常量

这是如果再对example.str赋值,则编译器将产生错误

用常量来保存公共数据是最为合适的。

11楼:百度用户

们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。

二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。

明白了这个本质区别,我们就不难看出下面的语句中static readonly和const能否互换了:

1. static readonly myclass myins = new myclass();

2. static readonly myclass myins = null;

3. static readonly a = b * 20;

static readonly b = 10;

4. static readonly int constintarray = new int ;

5. void somefunction()

1:不可以换成const。new操作符是需要执行构造函数的,所以无法在编译期间确定

2:可以换成const。我们也看到,reference类型的常量(除了string)只能是null。

3:可以换成const。我们可以在编译期间很明确的说,a等于200。

4:不可以换成const。道理和1是一样的,虽然看起来1,2,3的数组的确就是一个常量。

5:不可以换成readonly,readonly只能用来修饰类的field,不能修饰局部变量,也不能修饰property等其他类成员。

c语言中与有何区别,c语言中%c与%s的有什么区别?

1楼 匿名用户 在定义变量时 是定义指针 是引用 注 好象c没有引用 例如 int pvar null 定义一个int类型指针int var 0 int pvar var 定义一个引用 并且定义时要指定所引用的对象 在使用时 是解指针 即取其指向的变量的值 是取地址int var 10 int pv...

C语言中与的区别,c语言中“&”与“*”有什么区别?

1楼 匿名用户 是取地址 叫解引用,意思是取地址的内容 举例 int a 3 int b a 这里 表示取a的地址 b就是去b的地址的内容就是3 2楼 诡其辞 s形式表示取变量s的地址 a b形式表示a与b之间进行位与运算。 s形式表示指针变量指向的位置 a b形式 呵呵!不消说了。 3楼 匿名用户...

亦博气垫bb霜n和c有什么区别,IOPE气垫BBN和C什么区别

1楼 大爱诗爽 n是自然色系,遮盖力比较差,但是轻薄 c是遮瑕系列,遮盖力比n的强,不过也不是很厚重。这个看你自己本身的 质地,如果本身 没有瑕疵斑点,比较白皙,建议选择n 如果本身需要遮盖力强的,建议选择c。还有21和23两个色号,根据自己的肤色选择。 2楼 匿名用户 这个粉扑是特别设计的,双层结...