小编Mat*_*att的帖子

为什么gcc和clang允许我构造一个抽象类?

以下代码编译了广泛的gcc和clang版本 - 在编译并使用gcc 5.3.1运行时,它会打印出来

一个()

然后以纯虚拟调用错误中止.

#include <stdio.h>

class A
{
public:
    A() {
        printf("A()\n");
    }
    virtual void b() const = 0;
};

int main()
{
    const A& a{};
    a.b();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我意识到绑定对临时的引用并不理想(虽然我认为这种情况被某种生命周期扩展所覆盖) - 但它也适用于尝试调用一个带有const引用的方法,如:

Foo({});
Run Code Online (Sandbox Code Playgroud)

为方便起见,这里是一个用clang 3.2 编译的例子:Compiler Explorer

c++ gcc abstract-class clang pure-virtual

24
推荐指数
1
解决办法
488
查看次数

标签 统计

abstract-class ×1

c++ ×1

clang ×1

gcc ×1

pure-virtual ×1