草庐IT

pure-virtual

全部标签

Java "Virtual Machine"与 Python "Interpreter"的说法?

在Java中一直使用“虚拟机”时,似乎很少看到Python“虚拟机”。两者都解释字节码;为什么将一个称为虚拟机而另一个称为解释器? 最佳答案 虚拟机是一种虚拟计算环境,具有一组特定的原子定义明确的指令,这些指令不受任何特定语言的支持,并且通常被认为是一个沙箱。VM类似于特定CPU的指令集,并且倾向于在更基础的级别上工作,这些指令(或字节代码)的非常基本的构建块独立于下一个。一条指令仅根据虚拟机的当前状态确定性地执行,而不依赖于该时间点指令流中其他地方的信息。另一方面,解释器更复杂,因为它被定制为解析特定语言和特定语法的某些语法流,必

Java "Virtual Machine"与 Python "Interpreter"的说法?

在Java中一直使用“虚拟机”时,似乎很少看到Python“虚拟机”。两者都解释字节码;为什么将一个称为虚拟机而另一个称为解释器? 最佳答案 虚拟机是一种虚拟计算环境,具有一组特定的原子定义明确的指令,这些指令不受任何特定语言的支持,并且通常被认为是一个沙箱。VM类似于特定CPU的指令集,并且倾向于在更基础的级别上工作,这些指令(或字节代码)的非常基本的构建块独立于下一个。一条指令仅根据虚拟机的当前状态确定性地执行,而不依赖于该时间点指令流中其他地方的信息。另一方面,解释器更复杂,因为它被定制为解析特定语言和特定语法的某些语法流,必

c++ - 为什么 'pure polymorphism' 比使用 RTTI 更可取?

我见过的几乎所有讨论这类事情的C++资源都告诉我,我应该更喜欢使用多态方法而不是使用RTTI(运行时类型识别)。总的来说,我会认真对待这种建议,并会尝试理解其中的基本原理——毕竟,C++是一头强大的野兽,难以深入理解。然而,对于这个特定的问题,我画了一个空白,想看看互联网可以提供什么样的建议。首先,让我总结一下到目前为止我学到的东西,列出了为什么RTTI被“认为有害”的常见原因:一些编译器不使用它/RTTI并不总是启用我真的不买这个论点。这就像说我不应该使用C++14特性,因为有些编译器不支持它。然而,没有人会阻止我使用C++14特性。大多数项目都会影响他们使用的编译器及其配置方式。甚

c++ - 为什么 'pure polymorphism' 比使用 RTTI 更可取?

我见过的几乎所有讨论这类事情的C++资源都告诉我,我应该更喜欢使用多态方法而不是使用RTTI(运行时类型识别)。总的来说,我会认真对待这种建议,并会尝试理解其中的基本原理——毕竟,C++是一头强大的野兽,难以深入理解。然而,对于这个特定的问题,我画了一个空白,想看看互联网可以提供什么样的建议。首先,让我总结一下到目前为止我学到的东西,列出了为什么RTTI被“认为有害”的常见原因:一些编译器不使用它/RTTI并不总是启用我真的不买这个论点。这就像说我不应该使用C++14特性,因为有些编译器不支持它。然而,没有人会阻止我使用C++14特性。大多数项目都会影响他们使用的编译器及其配置方式。甚

c++ - 为什么纯虚函数初始化为0?

我们总是将纯虚函数声明为:virtualvoidfun()=0;即,它总是分配给0。我的理解是,这是为了将此函数的vtable条目初始化为NULL,此处的任何其他值都会导致编译时错误。这种理解正确与否? 最佳答案 使用=0的原因是BjarneStroustrup认为他无法获得另一个关键字,例如在实现该功能时C++社区之外的“纯”。这在他的书中有所描述,TheDesign&EvolutionofC++,第13.2.3节:Thecurious=0syntaxwaschosen...becauseatthetimeIsawnochance

c++ - 为什么纯虚函数初始化为0?

我们总是将纯虚函数声明为:virtualvoidfun()=0;即,它总是分配给0。我的理解是,这是为了将此函数的vtable条目初始化为NULL,此处的任何其他值都会导致编译时错误。这种理解正确与否? 最佳答案 使用=0的原因是BjarneStroustrup认为他无法获得另一个关键字,例如在实现该功能时C++社区之外的“纯”。这在他的书中有所描述,TheDesign&EvolutionofC++,第13.2.3节:Thecurious=0syntaxwaschosen...becauseatthetimeIsawnochance

c++ - 为什么我们需要 C++ 中的纯虚析构函数?

我了解虚拟析构函数的必要性。但是为什么我们需要一个纯虚拟析构函数呢?在其中一篇C++文章中,作者提到我们想要抽象类时使用纯虚析构函数。但我们可以通过将任何成员函数设为纯虚拟来使类抽象。所以我的问题是我们什么时候才能真正使析构函数成为纯虚函数?谁能给出一个很好的实时示例?当我们创建抽象类时,将析构函数也设为纯虚拟是一种好习惯吗?如果是……那为什么? 最佳答案 可能允许纯虚析构函数的真正原因是禁止它们意味着在语言中添加另一条规则,并且不需要这条规则,因为允许纯虚析构函数不会产生不良影响。不,普通的旧虚拟就足够了。如果您为其虚拟方法创建一

c++ - 为什么我们需要 C++ 中的纯虚析构函数?

我了解虚拟析构函数的必要性。但是为什么我们需要一个纯虚拟析构函数呢?在其中一篇C++文章中,作者提到我们想要抽象类时使用纯虚析构函数。但我们可以通过将任何成员函数设为纯虚拟来使类抽象。所以我的问题是我们什么时候才能真正使析构函数成为纯虚函数?谁能给出一个很好的实时示例?当我们创建抽象类时,将析构函数也设为纯虚拟是一种好习惯吗?如果是……那为什么? 最佳答案 可能允许纯虚析构函数的真正原因是禁止它们意味着在语言中添加另一条规则,并且不需要这条规则,因为允许纯虚析构函数不会产生不良影响。不,普通的旧虚拟就足够了。如果您为其虚拟方法创建一

c++ - C++中的纯虚析构函数

写错了吗:classA{public:virtual~A()=0;};对于抽象基类?至少在MSVC中编译...它会在运行时崩溃吗? 最佳答案 是的。你还需要实现析构函数:classA{public:virtual~A()=0;};inlineA::~A(){}应该够了。如果你从A派生出任何东西,然后尝试删除或销毁它,A的析构函数最终会被调用。由于它是纯粹的并且没有实现,因此会出现未定义的行为。在一个流行的平台上,这将调用purecall处理程序并崩溃。编辑:修正声明更符合,编译http://www.comeaucomputing.c

c++ - C++中的纯虚析构函数

写错了吗:classA{public:virtual~A()=0;};对于抽象基类?至少在MSVC中编译...它会在运行时崩溃吗? 最佳答案 是的。你还需要实现析构函数:classA{public:virtual~A()=0;};inlineA::~A(){}应该够了。如果你从A派生出任何东西,然后尝试删除或销毁它,A的析构函数最终会被调用。由于它是纯粹的并且没有实现,因此会出现未定义的行为。在一个流行的平台上,这将调用purecall处理程序并崩溃。编辑:修正声明更符合,编译http://www.comeaucomputing.c