C++ C++;知道container类有push_back函数吗?
当我查看C++ C++;知道container类有push_back函数吗?,c++,C++,当我查看std::back\u insert\u迭代器时 它表示将调用容器的push_back方法。它如何知道容器是否有推回的方法?它需要一个扩展任何虚拟类的类吗?它在哪里定义的?它不知道这是真的。相反,如果找不到这样的函数,它将无法编译 应该调用push_back的操作(本例中的赋值)是使用push_back编写的,如果给定的容器没有具有该名称的函数,则该函数的调用将无法编译 它表示将调用容器的push_back方法。它如何知道容器是否有推回的方法?它需要一个扩展任何虚拟类的类吗?它在哪里定义
std::back\u insert\u迭代器时
它表示将调用容器的push_back方法。它如何知道容器是否有推回的方法?它需要一个扩展任何虚拟类的类吗?它在哪里定义的?它不知道这是真的。相反,如果找不到这样的函数,它将无法编译 应该调用
push_back
的操作(本例中的赋值)是使用push_back
编写的,如果给定的容器没有具有该名称的函数,则该函数的调用将无法编译
它表示将调用容器的push_back方法。它如何知道容器是否有推回的方法?它需要一个扩展任何虚拟类的类吗?它在哪里定义
不,push_-back()
通常不是虚拟方法
std::back\u insert\u迭代器是一个模板,它将对传递的对象调用
push\u back()
。如果该方法丢失,您将得到一个编译错误。它不知道,您应该知道它。您必须将具有push\u back
的容器传递到std::back\u insert\u迭代器
。否则,将导致编译错误
例如,如果将其用于集合
,则会出现以下错误:
“class std::set”没有名为“push_back”的成员
不,它不需要扩展类
std::back\u insert\u迭代器
是一个模板;当他实例化模板时,编译器会发现你试图使用模板的类型是否有这个方法
我认为这种通过模板需要特定接口的类型被称为隐式接口(尽管我现在找不到一个明确的引用)——与从某个(可能是抽象的)类派生出来的显式接口相反。它是一个模板化的类 它将在编译时生成代码。在编译时,它将在容器中查找
push_back
函数。如果没有push_back
,它将不会编译
它如何知道容器是否有推回的方法
没有。如果您试图在没有push\u back
的容器上使用它,则会出现编译错误
它需要一个扩展任何虚拟类的类吗?它在哪里定义
不,它只需要一个定义它的类。通常,模板不通过虚拟函数使用动态多态性;它们只需要包含的代码(如
容器。push_back(thing)
)在参数替换后才有效。如果您谈论的是模板(作为模板发送的容器),那么编译器将尝试扩展模板,如果找不到方法,它将失败。模板在编译时被检查,因此编译将通知您容器没有您请求的方法 因为它编译成功。