• 关于

    编译原理

    的搜索结果

问题

编译原理和算法导论是不是屠龙技 有技而无龙可屠

编译原理和算法导论是不是屠龙技 有技而无龙可屠...
知与谁同 2019-12-01 20:12:18 536 浏览量 回答数 2

问题

Makefile文件修改后,编译程序是否需要重新clean后,编译?

Makefile文件修改后,编译程序是否需要重新clean后,编译? 可否从Makefile的工作原理上剖析一下 ,是否每次都需要对工程代码,修改->make clean->make -j...
a123456678 2019-12-01 19:46:15 1172 浏览量 回答数 1

问题

[@倚贤][¥20]Java中使用prepareStatement预编译为什么就可以防止sql注入了,具体原理是什么样的?

Java中使用prepareStatement预编译为什么就可以防止sql注入了,具体原理是什么样的?...
月下丶 2019-12-01 19:27:18 586 浏览量 回答数 4

回答

这个地方你需要了解下编译原理了,首先C/C++和PHP的区别1) 一个是动态语言(PHP),一个是静态语言(C++)2) C/C++编译的基本单位是文件,其中采用的是声明和实现分离的方式,这里的声明你可以理解为接口的一种抽象,声明是.h,实现在.c里。 对于 "stdio.h"和“mystock.h”,C++编译器做的首先是根据main.c、a.c、b.c里对着2个头文件的使用进行词法分析、语法分析等,然后编译出一个中间文件obj,编译没问题了再链接,这是有别于PHP的,所以在编译的时候这3者文件可能都被扫描了(是否完全扫描取决于编译器的实现),但最后链接的时候,这3者的实现在内存中是只有一份的。
a123456678 2019-12-02 02:59:51 0 浏览量 回答数 0

问题

ARC 时代,编译器自动添加对指针的管理,是如何进行的

现在 iOS 开发已经进入了 ARC时代,原理不外乎把之前需要手动 retain release autorelease 的代码让编译器自己插入了,那么编译器自己是如何寻找插入的位置,并作出合理判断呢??...
a123456678 2019-12-01 19:22:34 845 浏览量 回答数 2

回答

写法1是静态编译,不会生产so文件;写法2是动态编译,会生产so文件。写法2是编译安装PHP时一起做的,实质结果和phpize仍然是一样的,同样要修改ini文件显示的配置扩展so。但是,写法2有几个相关的问题:1.官方PHP发行源代码中不一定包含你需要的扩展源代码,因此你不能直接enable或with,如果要这样做则需要删除原理的configure文件并拷贝扩展源代码到ext目录,然后./buildconf --force重新生成configure文件2.否则,如果官方PHP发行源代码中没包含你需要的扩展源代码你也没要一定要静态编译的方式安装,则有2个选择:一是如果支持pecl命令安装,则直接用pecl命令安装;如果扩展不支持pecl安装,才自己使用phpize何php-config命令编译安装关于两种安装方式的区别,前面提到的网站中有相关的说明,主要是静态编译是直接将扩展编译到PHP主程序中了,其扩展调用的步骤不动态编译方式要简单,有利于提高性能。但是,大部分时候,这点性能应该是可以忽略的了
落地花开啦 2019-12-02 02:47:45 0 浏览量 回答数 0

问题

有关编译原理(编译器设计)的一道题

...
赵士龙 2020-12-25 13:55:57 0 浏览量 回答数 0

回答

Java泛型实现原理:类型擦出 Java的泛型是伪泛型。在编译期间,所有的泛型信息都会被擦除掉。正确理解泛型概念的首要前提是理解类型擦出(type erasure)。 Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。 如在代码中定义的`List<object>`和`List<String>`等类型,在编译后都会编程`List`。`JVM`看到的只是`List`,而由泛型附加的类型信息对`JVM`来说是不可见的。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法避免在运行时刻出现类型转换异常的情况。类型擦除也是Java的泛型实现方法与`C++`模版机制实现方式(后面介绍)之间的重要区别。
蛮大人123 2019-12-02 02:07:58 0 浏览量 回答数 0

问题

编译器处理结构体的原理

比如 struct {short :2; short b :14;}c;,编译器是怎么根据语法树知道需要为 c 分配一个两字节空间,并且里面有两个位域的?这只是一个例子,想知道编译器在生成语法树后,是怎么处理并展开结构体变量的?...
a123456678 2019-12-01 19:48:19 946 浏览量 回答数 1

回答

  主要还是看你学系统方向还是软件方向或是信息方向。下面简单归纳一下。 计算机科学与技术专业:C语言程序设计、计算机组成原理、数据结构、操作系统、 微机原理及汇编语言、计算机中国络、计算机系统结构、软件工程、面向对象程序设计等。  计算机软件专业:面向对象程序设计、计算机组成原理、操作系统、数据结构、计算 机中国络、软件工程、编译原理、分布式系统、软件项目管理、Oracle数据库系统等。  电子商务专业:管理学原理、电子商务、物流管理、计算机中国络、供应链管理、电子商务平台及核心技术、国际商务管理、电子商务案例分析、商务中国站建设等。   本专业是计算机硬件与软件相结合、面向系统、侧重应用的宽口径专业。通过基础教学与专业训练,培养基础知识扎实、知识面宽、工程实践能力强,具有开拓创新意识,在计算机科学与技术领域从事科学研究、教育、开发和应用的高级人才。本专业开设的主要课程有:电子技术、离散数学、程序设计、数据结构、操作系统、计算机组成原理、微机系统、计算机系统结构、编译原理、计算机中国络、数据库系统、软件工程、人工智能、计算机图形学、数字图像处理、计算机通讯原理、多媒体信息处理技术、数字信号处理、计算机控制、中国络计算、算法设计与分析、信息安全、应用密码学基础、信息对抗、移动计算、数论与有限域基础、人机界面设计、面向对象程序设计等
行者武松 2019-12-02 01:22:35 0 浏览量 回答数 0

回答

C/C++之所以不能跨平台,就是因为C/C++源程序是对平台编译的,所以与平台密切相关。如果有这样的一个环境:它既可以向下兼容(对平台兼容),又可以向上兼容(程序可以运行),那么不就可以跨平台了吗。基于这样的原理,Java在计算机的操作系统上又提供了一个Java运行环境——JRE(安装JDK)。 JRE由Java虚拟机,类库和一些核心文件组成,也就是说,只要平台提供了Java运行环境,Java编写的软件就可以在其上运行。 和C/C++不同的是,Java语言提供的编译器不针对特定的操作系统和CPU芯片进行编程,而是针对Java虚拟机把Java源程序编译成称为字节码的“中间代码”,然后Java虚拟机负责将字节码翻译成虚拟机所在平台的机器码,并让当前平台运行该机器码。 Java语言的运行原理: 在一个计算机上编译得到的字节码文件(就是.class文件),可以复制到任何一个安装了Java运行环境的计算机上直接运行。然后字节码文件由虚拟机负责解释执行,即Java虚拟机将字节码翻译成本地计算机的机器码,然后将机器码交给本地的操作系统运行。 由于在一个计算机上编译得到的字节码文件可以复制到任何一个安装了Java运行环境的计算机上直接使用,所以字节码其实是一种“中间代码”,这也就是为什么“Java语言能够一次编译,处处运行,也就是Java跨平台的原因。”所以称Java是一种“半编译,半解释的语言”,即源程序——>编译——>字节码——>字节码解释程序——>对应平台的机器语言。”
一只刺猬 2020-03-30 10:22:15 0 浏览量 回答数 0

问题

重新编译PHP,要保持和原来环境相同?报错

如题, 想弄个php多线程扩展玩玩,但是多线程扩展必须编译 --enable-maintainer-zts 由此有几个问题: 1. 怎么查看 --enable-maintainer...
爱吃鱼的程序员 2020-06-20 16:41:59 0 浏览量 回答数 1

回答

一、平台与机器指令       无论哪种编程语言编写的应用程序都需要经过操作系统和处理器来完成程序的运行,因此这里的平台是又OS和CPU所构成的,所谓的平台无关就是指软件的运行不会因操作系统、处理器的变化而无法运行或出现运行错误。        每个平台都有自己独特的机器指令,所谓平台的机器指令就是可以被该平台直接识别、执行的一种由0和1组成的序列代码。相同的CPU和不同的OS所形成的平台的机器指令可能是不同的 二、何为与平台相关?      C/C++程序是依赖平台的:C/C++源程序所在的特定平台对其源文件进行编译、链接,生成机器指令,即根据当前平台的机器指令生成可执行文件,所以其可以在任何与当前平台相同的平台上运行这个可执行文件。但是,不能保证C/C++源程序所产生的可执行文件在所有平台上都能正确的运行,其原因是不同平台可能具有不同的机器指令。所以,一旦更换了平台,就可能需要修改源程序,并针对新的平台重新编译源程序,也就是与平台相关。 C/C++程序无法跨平台的根本原因是C/C++源程序的编译器针对平台进行编译,而不同的平台有不同的机器指令,所以无法跨平台。 三、Java为何可以跨平台       C/C++之所以不能跨平台,就是因为C/C++源程序是对平台编译的,所以与平台密切相关。如果有这样的一个环境:它既可以向下兼容(对平台兼容),又可以向上兼容(程序可以运行),那么不就可以跨平台了吗。基于这样的原理,Java在计算机的操作系统上又提供了一个Java运行环境——JRE(安装JDK)。       JRE由Java虚拟机,类库和一些核心文件组成,也就是说,只要平台提供了Java运行环境,Java编写的软件就可以在其上运行。        和C/C++不同的是,Java语言提供的编译器不针对特定的操作系统和CPU芯片进行编程,而是针对Java虚拟机把Java源程序编译成称为字节码的“中间代码”,然后Java虚拟机负责将字节码翻译成虚拟机所在平台的机器码,并让当前平台运行该机器码。 Java语言的运行原理: 在一个计算机上编译得到的字节码文件(就是.class文件),可以复制到任何一个安装了Java运行环境的计算机上直接运行。然后字节码文件由虚拟机负责解释执行,即Java虚拟机将字节码翻译成本地计算机的机器码,然后将机器码交给本地的操作系统运行。 由于在一个计算机上编译得到的字节码文件可以复制到任何一个安装了Java运行环境的计算机上直接使用,所以字节码其实是一种“中间代码”,这也就是为什么“Java语言能够一次编译,处处运行,也就是Java跨平台的原因。”所以称Java是一种“半编译,半解释的语言”,即源程序——>编译——>字节码——>字节码解释程序——>对应平台的机器语言。” 作者:糖人豆丁 来源:CSDN 原文:https://blog.csdn.net/newmemory/article/details/54949817 版权声明:本文为博主原创文章,转载请附上博文链接!
auto_answer 2019-12-02 01:50:00 0 浏览量 回答数 0

回答

1.由于Android项目是基于java语言的,而java属于高层抽象语言,易于反编译,其编译后的程序包包含了大量的源代码变量、函数名、数据结构等信息,根据其编译打包后的APK文件,可以非常容易的得到 近乎源代码质量 的反编译代码。如果不加混淆,相当于直接将源代码拱手送人,内容严密的app权限审核可以说是形同虚设。如果大家想避免自己的成果被别人夺取,然后重新修改策划而额外增加的工作量,那就尽量得自己的Android项目加上混淆吧。也就是说,为了防止他人可以轻松的反编译出你的apk,需要给你的编译的APK加层“密码”,也就是所谓的“混淆”。2.Android平台的混淆原理是把代码中原来有具体含义的包名,类名,变量名,方法名等名称全部替换成按顺序排列的无意义的英文字母a、b、c….这样代码结构没有变化,还可以运行得到一样的结果,并且就算代码被反编译出来,别人想弄懂代码的架构和具体意思也比较难。所以当你混淆后运行app时,这个时候APK文件已经是被混淆过的,使用的类也是已经被混淆过的,编译时可能正确但是运行时会报错,所以一些必要的类需要手动去在混淆文件中标明不混淆。3.不难理解,混淆之后,类名会变成a,b,c这种,通过包名+类名自然就会找不到该类了,自然就会出现ClassNotFoundException异常。当混淆时候报一些引用未找到的时候,有一些可以选择忽略不计,但有一部分必须使用到的类无法找到就是2中提到的原因,即使在混淆文件中选择了不去提示警告后,编译时程序不会报错,但是运行时程序还是会出问题。所以一些类在混淆代码中需要特别标注出来,不可以混淆掉。
元芳啊 2019-12-02 00:56:07 0 浏览量 回答数 0

问题

dede标签的原理是什么呀?

dede的解释性标签与编译性标签有啥区别呢?他们的调用原理是什么呀?...
幸福量子 2019-12-01 19:59:44 1016 浏览量 回答数 1

回答

看你将来的工作,如果你将来作编译器开发,编译原理当然重要,而且有龙可屠 算法导论虽然重要,但也不是非他不可,一般的软件开发是用不着的,但如果你是库的开发者,没有算法导论的基础,会被人按在地上摩擦
祁同伟 2019-12-02 01:19:45 0 浏览量 回答数 0

回答

不探究原理的话,你可以找到CSerial 类的头文件,在你定义CSerial m_serial的CPP文件中include。探究原理的话,楼上说的已经很清楚了,补充一下,你之所以之前使用CSerial *m_serial能够不报错,是因为此时你声明的是一个指针而不是对象(代码前面应该有class CSerial的前置声明),此时编译器不需要知道CSerial类的大小,只需要分配一个指针大小的空间即可,在链接的时候才会去找相关的方法和属性。如果你用CSerial m_serial形式声明,此时声明的是一个对象,由于你没有include这个类的头文件,所以编译器不知道要分配多少空间给这个对象,所以就报错喽。
a123456678 2019-12-02 01:58:37 0 浏览量 回答数 0

问题

c编译原理,如何处理同名局部变量和全局变量

c中,一个文件里局部变量可以和全局变量重名。那这个文件编译出来的.o中,这两个变量的符号是怎么表示的呢?不可能符号是相同的呀!c++处理这种情况时,符号表示和c一样还是不同呢?...
a123456678 2019-12-01 20:27:07 855 浏览量 回答数 1

问题

c编译原理,如何处理同名局部变量和全局变量

c中,一个文件里局部变量可以和全局变量重名。那这个文件编译出来的.o中,这两个变量的符号是怎么表示的呢?不可能符号是相同的呀!c++处理这种情况时,符号表示和c一样还是不同呢?...
a123456678 2019-12-01 20:07:13 912 浏览量 回答数 1

回答

1、单论语言高并发性能,我没有做过测试,网上的测试不知道具体的测试用例。所以不能武断下结论2、Java的高性能处理,目前的测试网上有可以查询的BenchMark,Linux .NEt Core和Java并发最高,Go第三,其他离得都比较远。3、我们从语言和底层原理来分析三个不同的技术4、Java是基于JVM的强类型编译型语言,NIO模型,在Linux和Windows平台上非常成熟,5、swoole作为PHP底层扩展的IO框架,支持Epoll等模式,这个Java也支持。6、luajit据说可以支持预编译,其实也是把Lua脚本解释模型改成类Java的执行模式,还有就是可以预编译,更像Java。7、综上所述,我们可以推测,后两者最近的改进或者实验都是Java已经支持或者实现的成技术理念。8、PHP和Lua都是解释性脚本语言,就算底层IO模式一样,语言只有在编译和执行上做到类Java,或者类C的一次性编译模式性能才会超过Java。因为计算器硬件资源都是一样的。 阿里巴巴云栖社区Java专场12月22日周六下午 杭州 爆满,https://yq.aliyun.com/activity/796不少同学 高铁 飞机来杭州参加大会
徐雷frank 2019-12-02 01:49:24 0 浏览量 回答数 0

回答

你这种写法在代码里是不被允许的,这与java泛型的实现原理有关,java泛型只是方便编码的一个语法糖,泛型代码会在编译的时候会进行类型擦除、 泛型相关代码会进行类型强转 ,回到你上面的代码里,变量array的类型在第7行编码上写死了是Object[],所以代码进过编译后会将Object[]强转成Interger[] 所以会报 [Ljava.lang.Object;cannotbecastto[Ljava.lang.Integer  一般在java中用想实现你想要的这种功能应当使用java集合来实现 如 List<T>array=newArrayList<T>(size); 引用来自“享开发”的评论 你这种写法在代码里是不被允许的,这与java泛型的实现原理有关,java泛型只是方便编码的一个语法糖,泛型代码会在编译的时候会进行类型擦除、 泛型相关代码会进行类型强转 ,回到你上面的代码里,变量array的类型在第7行编码上写死了是Object[],所以代码进过编译后会将Object[]强转成Interger[] 所以会报 [Ljava.lang.Object;cannotbecastto[Ljava.lang.Integer  一般在java中用想实现你想要的这种功能应当使用java集合来实现 如 List<T>array=newArrayList<T>(size); 引用来自“享开发”的评论 你这种写法在代码里是不被允许的,这与java泛型的实现原理有关,java泛型只是方便编码的一个语法糖,泛型代码会在编译的时候会进行类型擦除、 泛型相关代码会进行类型强转 ,回到你上面的代码里,变量array的类型在第7行编码上写死了是Object[],所以代码进过编译后会将Object[]强转成Interger[] 所以会报 [Ljava.lang.Object;cannotbecastto[Ljava.lang.Integer  一般在java中用想实现你想要的这种功能应当使用java集合来实现 如 List<T>array=newArrayList<T>(size); 这是《effectivejava》上的例子? T[]array;@SuppressWarnings("unchecked")publicTEst(intsize){array=(T[])newObject[size];}publicvoidadd(){array[0]=(T)newInteger(1);}publicstaticvoidmain(Stringargs[]){TEst<Integer>t1=newTEst<Integer>(2);t1.add();} 父类不能向子类转型 子类可以向父类转型
爱吃鱼的程序员 2020-06-22 10:43:56 0 浏览量 回答数 0

问题

PHP编译原理解析? 400 报错

PHP编译原理解析? 400 报错 最近要给Yahoo的同事们做一个关于PHP和Apache处理请求的内部机制的讲座,刚好写了些关于Opcodes的文字,就发上来了,这个文章基于 Sa...
爱吃鱼的程序员 2020-06-02 17:18:05 0 浏览量 回答数 1

回答

第一学年: 秋季:高等数学,道德与法律,体育,基础外语,军事理论,信息技术基础,程序设计(c),军训 春季:高等数学,中国化马克思主义,体育,基础外语,大学物理,工程制图,面向对象程序设计(C++) 第二学年: 秋季:中国近代史纲要,体育,基础外语,大学物理,电路分析,线性代数,概率论与数理统计,集合与图论,大学物理实验 春季:马克思主义基本原理,体育,基础外语,数字逻辑,电子技术基础,数据结构,代数结构与树立逻辑,计算方法,大学物理实验 第三学年: 秋季:汇编语言,操作系统原理,专业外语,计算机组成原理,计算机网络原理,编译原理 春季:计算机图形学,数据库原理,软件工程学基础,接口与通讯技术,计算机系统结构 第四学年: 秋季:数据库课程设计 春季:毕业设计 这些是必修课程,此外到了大三或是要开始选修一些限选课,还是有很多科目的。
boxti 2019-12-02 01:22:34 0 浏览量 回答数 0

回答

各有所长,领域不同。1、C++比Java快,主要是语言的执行原理决定的,Java并不是要取代C++。Java有自己擅长的问题领域。2、C++原生编译,直接生成对不同系统和CPU编译成优化过的指令集,直接执行,Java需要一次中间代码的再次跟进系统和CPU再次编译优化执行。所以流程上多一步。3、C++性能优势体现在,现在很多数据库内核、图形软件都是C++开发的,追求性能的程序C++是王道。4、Java主要做企业应用,比如网站、或者系统。C++开发网站太慢了,主要是开发速度,不是运行速度。5、阿里主要是电商平台和支付系统,属于企业级应用开发,阿里也有C++比如自研的MySQL、OB数据库,以及优化JVM内核都是C++。
徐雷frank 2019-12-02 01:48:03 0 浏览量 回答数 0

回答

1、静态AOP:在编译期,切面直接以字节 码的形式编译到目标字节 码文件中。 AspectJ属于静态AOP,是在编译时进行增强,会在编译的时候将AOP逻辑织入到代码中,需要专有的编译器和织入器。 优点:被织入的类性能不受影响。 缺点:不够灵活 2、动态AOP(JDK动态代理):在运行期,目标类加载后,为接口动态生成代理类,将切面植入到代理类中。 Java从1.3引入动态代理。实现原理是为被代理的业务接口生成代理类,将AOP逻辑写入到代理类中,在运行时动态织入AOP,使用反射执行织入的逻辑。 主要实现方式依赖java.lang.reflect包下的InvocationHandler和Proxy类。 优点:Java标准库原生支持,使用简单,无需引用额外的包。相对于静态AOP更灵活。 缺点:带代理的类必须是接口,灵活性受到一些限制;使用反射会影响一些性能。 3、动态代码字节生成:在运行期,目标类加载后,动态构建字节码文件生成目标类的子类,将切面逻辑加入到子类中。 CGLib是动态代码字节生成的实现,它封装字节码生成工具Asm,原理是在运行期间目标字节码加载后,生成目标类的子类,将切面逻辑加入到子类中,所以使用Cglib实现AOP不需要基于接口。 优点:没有接口也可以织入,灵活性高。 缺点:扩展类的实例方法为final时,则无法进行织入 4、自定义类加载器:在运行前,目标加载前,将切面逻辑加到目标字节码中。 可以考虑javassist来实现。Javassist 是一个编辑字节码的框架,可以让你很简单地操作字节码。它可以在运行期定义或修改Class。使用Javassist实现AOP的原理是在字节码加载前直接修改需要切入的方法。 优点:可以对绝大部分类织入。 缺点:如果用到了其他类加载器,则这些类将不被织入
jianxia 2019-12-02 03:08:17 0 浏览量 回答数 0

回答

1、计算机组成原理(包括先修课程“数字逻辑与数字系统”,简称“数电”):这是一门硬件基础课,学完后你能清楚的知道如何从用最简单的数字元件,像搭积木一样构成整个计算机系统,那就算及格了。 一门名为计算机体系结构是本课程的扩充包,对于了解近代计算机结构体系当然是必要的,但由于这里讨论的是Top 5,因此我认为计算机组成原理更为基础。 Computer Systems - A Programer's Perspective (2rd Edition)。 中文译本是《深入理解计算机系统》。 2、线性代数,概率与统计和离散数学:要知道,凡是能称之为“科学”的专业,就必须有一定的数学功底,否则难以称作“科学”。这三门课我觉得是本科时期最重要的三门数学课,比高等数学重要。如果你想在计算机科学的道路上走远点,那这三门可是必修的。 3、MIT开设的《Introduction To algorithm》,中文版叫《算法导论》:我觉得应该学习它而不是国内习惯开设的《数据结构》。数据结构仅仅是算法的一部分,国内的数据结构课程回避了很多本质的东西,仅仅是对一些常见的数据结构的罗列,学起来总有些不痛不痒的感觉。《Introduction To algorithm》虽然有些章节夹杂着很多很让人讨厌的“数学”,但却能从本质上带你领略这门十分必要而且有趣儿的课。 4、操作系统与编译原理:操作系统可以说是《算法导论》的实验课,最好能在学习期间自己实现一个小型的操作系统,或者操作系统各分系统的Demo。编译原理可能是普遍本科生觉得难的一门课,但是作为CS本科生或者未来的软件科学家,这是基础中的基础,学完之后所有的语言在你看来应该没有太大的区别,这门课应该是离散数学+算法导论的实验课。最好能在学习期间自己实现一个小型的编译器,语言最好能自创,或者是某个已有的你喜欢的语言的基本子集。 5、掌握一门常用的编程语言和编程技术:能了解你用过的所有的程序内部大致是怎样的,能用你熟悉的语言编写大部分的程序,至少不能是对任何一个程序满头雾水。
liujae 2019-12-02 01:20:34 0 浏览量 回答数 0

回答

堆栈(stack)和堆(heap)是应用程序中的两个地址空间,任何应用程序都有,和语言无关。堆栈空间是编译期静态分配的,如果你有C++和编译原理基础,看到程序就可以确定堆栈的分配情况了。堆空间是运行时动态分配的,在编译期没有办法确认分配空间的情况。它们的特点是:堆栈更快(如书上所说),但堆更灵活。举个例子,假设A类有两个派生类(B,C),在Java中,你可以这么写: A a;char c = System.in.read();if(c == 'B') a = new B();else a = new C();显然,在编译的时候你不能确定a到底被新建成B还是C了,这就是在堆中新建对象的灵活性所在。但是在C++中,你如果写了A a,编译器就会知道你新建的是A对象,而不是B对象或C对象。你不能写:A a; a = B()值得注意的是,C++中也可以把对象建在堆上,但这就要用到指针(其实java的原理也是指针,只不过你不需要)也就是楼上所说:A* a = new A(),因此,在C++中可以这么写: A *a;//此处只有用指针,然后下面用new,才能把对象建在堆上。用A a的对象是建在堆栈中的。char c;cin << c;if(c == 'B') a = new B();else a = new C();同时,在堆栈中创建的对象,在作用域(比如函数)结束时,会被销毁。在堆中创建的对象会一直存在。这也是java为什么需要垃圾回收的原因(C++没有垃圾回收,你new出来的对象,你要自己delete)。 总结一下: C++中,对象既可以建在堆上,也可以建在堆栈中,但是在堆上的对象如果不用了,程序员需要自己回收空间; java中,对象都建在堆上,系统会自动回收不再使用的空间; java中的堆对应的也是C++中的堆,只不过C++多一种在堆栈中放对象的方式; java中也有堆栈,但一般只存储一些引用和基本变量,不放对象,程序员通常也不需要去管。
a123456678 2019-12-02 02:01:25 0 浏览量 回答数 0

回答

大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现。 上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如JavaScript), 而下面的那条分支就是传统编译原理中从源代码到目标机器代码的生成过程。
huc_逆天 2020-01-09 10:36:32 0 浏览量 回答数 0

回答

可以看看编译原理, 大部分的语言都差不多一个流程.
注浆机 2019-12-02 01:31:33 0 浏览量 回答数 0

回答

java中的泛型,在语法上的写法就是尖括号中间放个占位符,比如,泛型是java 1.5后来增加的功能,在1.4及以前是没有的,目的是为了达到跟c++语言里模板类似的功能,Java泛型的实现原理上,是使用了擦除,在运行期可能会丢失T所表示的实际类型,如果B类是A类的子类,在运行期是可以放入B类的对象的,但是在编译期,编译器会认为尖括号内的类型是A类,对B类无法感知,存在运行期实际对象类型丢失的问题
1038123254913072 2019-12-02 01:01:54 0 浏览量 回答数 0
阿里云企业服务平台 陈四清的老板信息查询 上海奇点人才服务相关的云产品 爱迪商标注册信息 安徽华轩堂药业的公司信息查询 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 天籁阁商标注册信息 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 北京芙蓉天下的公司信息查询