Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ O';雷利';s";目标-C袖珍参考“;索赔C和x2B+;不';t支持动态调度,这是真的吗?_C++_Objective C_Dynamic Binding_Dynamic Dispatch - Fatal编程技术网

C++ O';雷利';s";目标-C袖珍参考“;索赔C和x2B+;不';t支持动态调度,这是真的吗?

C++ O';雷利';s";目标-C袖珍参考“;索赔C和x2B+;不';t支持动态调度,这是真的吗?,c++,objective-c,dynamic-binding,dynamic-dispatch,C++,Objective C,Dynamic Binding,Dynamic Dispatch,在第4页,它说: Objective-C在运行时通过搜索接收方的类和父类来动态地决定哪些代码将处理消息。(Objy-C运行时缓存搜索结果以获得更好的性能)。相比之下,C++编译器在编译时静态构建调度表。 我在StAcExoad和维基百科上已经阅读了很多,足以说明我完全不知道C++是否支持动态调度(有人说是动态绑定的实现)。 < >谁能清除动态调度、动态绑定和C++是否支持其中之一或两者之间的区别?我不是C++或ObjuleC专家,我来自java、Python和PHP世界。< P> C++支持虚拟

在第4页,它说:

Objective-C在运行时通过搜索接收方的类和父类来动态地决定哪些代码将处理消息。(Objy-C运行时缓存搜索结果以获得更好的性能)。相比之下,C++编译器在编译时静态构建调度表。

我在StAcExoad和维基百科上已经阅读了很多,足以说明我完全不知道C++是否支持动态调度(有人说是动态绑定的实现)。


< >谁能清除动态调度、动态绑定和C++是否支持其中之一或两者之间的区别?我不是C++或ObjuleC专家,我来自java、Python和PHP世界。

< P> C++支持虚拟成员函数的动态调度。
我不认为这本书另有说法。“C++编译器在编译时静态地构建一个调度表”,这是正确的:在动态编译中使用的调度表(Vtable)是在编译时构建的,至少在C++的大多数实现中是这样的。

< P> C++支持虚拟成员函数的动态调度。
我不认为这本书另有说法。它指出“C++编译器在编译时静态地构建一个调度表”,这是正确的:在动态编译中使用的调度表(“Vtable”)是编译时构建的,至少在C++的大多数实现中是这样的。

< P>你的标题和你的问题不同。

本书的声明是正确的:C++虚拟调度是在运行时执行的,但调度表是编译时生成的。然而,这与说C++不支持“动态调度”不同。虚拟函数是动态分派的一种形式,但有许多级别的内容都在术语“动态分派”下归档。

您的标题与您的问题不同


本书的声明是正确的:C++虚拟调度是在运行时执行的,但调度表是编译时生成的。然而,这与说C++不支持“动态调度”不同。虚拟函数是动态分派的一种形式,但有许多级别的内容都在术语“动态分派”下归档。

C++确实支持通过动态分派


但是,它不(本机)支持,这是一个根据对象的运行时类型和方法参数的运行时类型确定要调用的方法的系统。

C++支持通过动态调度


但是,它不是(本地)支持,它是基于对象的运行时类型和方法参数的运行时类型来确定调用的系统。

< P>本书中提到的动态调度可能是在C++上下文中通常提到的不同动态调度:< /P>
  • C++支持虚拟函数形式的动态调度。虽然实际调用的finction取决于对象的动态类型,但相应的名称和参数在编译时确实是已知的
  • 我不是一个Objective C专家,但我的理解是,您可以在运行时动态地向单个对象添加函数,这些对象在被调用时会被查找。C++不支持这种动态调度。< /LI>

本书中提到的动态调度可能是一种不同的动态调度,通常在C++上下文中引用:

  • C++支持虚拟函数形式的动态调度。虽然实际调用的finction取决于对象的动态类型,但相应的名称和参数在编译时确实是已知的
  • 我不是一个Objective C专家,但我的理解是,您可以在运行时动态地向单个对象添加函数,这些对象在被调用时会被查找。C++不支持这种动态调度。< /LI>

如果“动态调度”是指“在运行时调用函数调用给定对象的方法时的更改”,比“是”:C++没有语言级——一种结构化的本地机制来执行此操作。(这意味着在运行时更改v-table指针,甚至是v-table中的函数指针:强制实现特定的构造是可能的,但可能会伤害孩子:-)将其视为“色情编码”!)

> C++具有基于类继承和虚函数的“动态调度”。 通过将对象实现为子对象的集合,为给定接口实现它们自己的变量(实质上是“行为模式”),并在需要时更改子对象,可以实现最可能的动态调度。

如果“动态调度”指“在运行时,调用函数调用一个方法,对于给定的对象”,比“是:C++”没有语言级——一个结构化的本地机制来执行这个操作。(这意味着在运行时更改v-table指针,甚至是v-table中的函数指针:强制实现特定的构造是可能的,但可能会伤害孩子:-)将其视为“色情编码”!)

> C++具有基于类继承和虚函数的“动态调度”。
通过将对象实现为子对象的集合,为给定接口实现它们自己的变量(实质上是“行为模式”),可以实现最可能的动态调度在需要时更改子对象。

基本上,C++使用“虚”关键字是“部分”动态的。我们通常将此特征称为“迟方法绑定”,它决定在运行时调用的特定方法。 不过,OC的强大运行时系统是“纯”动态的(不像javascript那么纯)。您可以在运行时添加方法和IVAR,而不是添加到menti