【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

readonly 和 const 的误区

原创 2016年06月01日 08:55:43

readonly和const都用来定义只读变量,但是readonly属于动态常量,const属于静态常量:

<span style="color:#3366ff;">动态常量:在运行时获取常量的值,并赋值到每个引用的位置;
静态常量:在编译时会把每个引用该常量的位置,全部替换成设定的值 -- 如果有c语言基础,一定可以理解这一点</span>

所以静态常量在定义的时候必须初始化,且不能再修改,因为项目一旦开始编译,静态常量的值就会被获取,并替换项目中所有引用该常量的位置;

但是动态变量是可以延时到构造函数再初始化(当然在定义的时候也可以直接初始化),且不能再修改。


上面简单做了描述,如果不能理解,那么我们通过一个例子来解释一下:


public class Test{
    public static readonly int A=10;
    public const int B=20;
}

public class Runner{
      public void Run(){
             int num_a=Test.A;
             int num_b=Test.B;
       }
}

如上代码,编译后:

class Test{
    .field public static initonly int32 A; -- 并未赋值
    .field public static literal int32 B=int32(0x00000014); -- 已经被赋值
}

代码中出现Test.B的位置,会全部被替换成20,所以在运行的时候,性能会比较好;

代码中出现Test.A的位置,依然是Test.A,所以运行的时候,内存中需要记录Test.A的值,每当运行到Test.A调用时,就到内存中读取该值,所以性能次之;


经常出现的问题:

在一个项目A中,定义了一个静态常量 const SOMETHING=VALUE; 在另一个项目B中做了引用,但后期因各种需求,需要变更项目A中常量的值,并对项目A重新编译后部署,但此时并没有重新编译项目B,所以导致项目B运行时,仍然是过期的常量值。


了解它们的区别,才能更合理的使用它们:

readonly:有内存消耗;可以是任意类型(包括自定义的类型);可以在定义时或构造函数中初始化;

const:无内存消耗;只能是基元类型;只能在定义时初始化;


版权声明:本文为博主原创文章,未经博主允许不得转载,如转载请注明出处。 举报

相关文章推荐

【c++ primer】第八章 函数探幽

一,C++内联函数 定义: inline double square (double x){return x*x;}//含有关键字inline的内联函数 描述:内联函数类似于宏的定义与调用 <stro

CF-Codeforces Round #420 (Div. 2)-D-Okabe and City

ACM模版描述 题解这个题真的有趣,最短路,难点主要是在建图上~~~这里先说一下题面的误区,我一开始理解为每盏灯只能点亮其所在的行或者列,谁成想并不是这样,而是说能点亮任何行或者列。那是否意味着我们...
  • f_zyj
  • f_zyj
  • 2017-06-27 20:27
  • 145

Javascript与CSS在IE和Firefox中的误区及区别

Javascript中的常见问题 1. 集合类对象问题 现有代码中许多集合类对象取用时使用 (),IE 能接受,Firefox 不能。 解决方法:改用 [] 作为下标运算。如:document.forms("formName") 改为 Js代码 <img al

由浅入深探究 MySQL索引结构原理、性能分析与优化(强烈推荐)

from:http://blog.jobbole.com/87107/ 第一部分:基础知识: 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构。笔者理解索引相当于一本书的目录,通...

纯C 字符串操作函数 实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )

实现C/C++中的字符串操作函数是很练内功的,别看着这些函数很简单,自己实现起来,还是有许多地方需要考虑的,所以没独立写过的朋友,可以自己敲敲看 .--By Crazybaby strcpy</span
  • wsql
  • wsql
  • 2011-08-26 00:11
  • 437

纯C 字符串操作函数 实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )

转:http://blog.csdn.net/crazyjixiang/article/details/6720236   实现C/C++中的字符串操作函数是很练内功的,别看着这些函数很简单,自己...

纯C 字符串操作函数 实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )

实现C/C++中的字符串操作函数是很练内功的,别看着这些函数很简单,自己实现起来,还是有许多地方需要考虑的,所以没独立写过的朋友,可以自己敲敲看 .--By Crazybaby strcpy</span

ZOJ 3772 Calculate the Function [线段树+矩阵乘法]【思维?】

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3772 ————————————————————————————...

广州.Net培训之C#中const与readonly的区别

广州.Net培训之C#中const与readonly的区别 <img alt="" src="http://www.itcast.cn/files/file/201408/20140804170150581.p

由浅入深探究mysql索引结构原理、性能分析与优化

摘要: 第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1、 简单介绍B-tree B+ tree树 2、 MyisAM索引结构 3、 Annode索引结构 4、...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)