小编Gab*_*cia的帖子

调用不是内联的常量指针到成员函数

现在,我知道内联没有保证,但......

鉴于以下内容:

struct Base {
    virtual int f() = 0;
};

struct Derived : public Base {
    virtual int f() final override {
        return 42;
    }
};

extern Base* b;
Run Code Online (Sandbox Code Playgroud)

我们有:

int main() {
    return static_cast<Derived*>(b)->f();
}
Run Code Online (Sandbox Code Playgroud)

编译为:

main:
    movl    $42, %eax
    ret
Run Code Online (Sandbox Code Playgroud)

然而...

int main() {
    return (static_cast<Derived*>(b)->*(&Derived::f))();
}
Run Code Online (Sandbox Code Playgroud)

编译为:

main:
    pushl   %ebp
    movl    %esp, %ebp
    andl    $-16, %esp
    subl    $16, %esp
    movl    b, %eax
    movl    (%eax), %edx
    movl    %eax, (%esp)
    call    *(%edx)
    leave
    ret
Run Code Online (Sandbox Code Playgroud)

哪个真的很难过.

为什么没有内联PMF的调用?PMF是一个不变的表达!

c++ c++11

6
推荐指数
1
解决办法
340
查看次数

标签 统计

c++ ×1

c++11 ×1