以下代码编译了广泛的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