c++ - 以下4种调用其他成员方法的方式有什么区别?

标签 c++

以下四种调用另一个成员函数的方式有什么区别?

是否存在导致某种方法更可取的优点?

void Object::trigger() {
  (*this).triggerinner(10);
  this->triggerinner(10);
  triggerinner(10);
  Object::triggerinner(10);
}

void Object::triggerinner(int x) {
  std::cout << "trigger" << std::endl;
}

最佳答案

前三个在非模板代码中基本相同。 在模板成员函数中,前两个构成名称 查找依赖项(因此编译器可以在依赖项中查找名称) 基类)。一般来说,越简单越好,所以大多数人都喜欢 第三种形式,除非需要依赖查找, 在这种情况下,他们将使用第二个。

第四种形式阻止虚拟分辨率。 (而且它已经在 其实和上面的三种形式一样,即 this->Object::triggerinner(10) 等)当您 想要强制解决:调用的函数将位于 Object 或在 Object 的基类中,但绝不会在派生类中 类,即使该函数是虚函数。这是最常用的 在派生类中,先调用基类实现 (或之后)做额外的工作:

void
Derived::func()
{
    Base::func();
    //  Additional work here...
}

除了成员函数之外,还可以用来调用 当您没有对象时,使用静态成员函数。

关于c++ - 以下4种调用其他成员方法的方式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19536002/

相关文章:

c++函数在之后立即调用析构函数

c++ - 是否可以提示用户输入并提供默认值?

c++ - 将 SDL_Surface 像素复制到 STL 容器中

c++ - 如何自动生成c++头文件

c++ - 从 C++ 中的 Dll 中提取

c++ - constexpr 模板参数的显式指定参数无效

c++ - 将 std::array 转换为 std::vector

c++ - 这不是 The C++ Programming Language(4 ed) 一书中的错误吗?

c++ - std::vector : 无法将 'std::ostream {aka std::basic_ostream<char>}' 左值绑定(bind)到 'std::basic_ostream<char>&&'

c++ - 无法打开 UART。确保它没有被其他应用程序使用