次のコードは、GCCおよび打ち鳴らすバージョンの広い範囲にコンパイル - コンパイルされ、GCC 5.3.1で実行すると、それは純粋仮想コールエラーで中止し、その後なぜgccとclangは抽象クラスを構築できますか?
A()
を印刷します。
#include <stdio.h>
class A
{
public:
A() {
printf("A()\n");
}
virtual void b() const = 0;
};
int main()
{
const A& a{};
a.b();
return 0;
}
私は(私はこの場合は、寿命延長のいくつかの並べ替えで覆われていると思いますが)一時的に参照をバインドすることは理想的ではない実現 - しかし、constのを取るメソッドを呼び出すしようとしたとき、それはまた、動作します同様の参照:便宜上
Foo({});
はここに打ち鳴らす3.2でコンパイルすることの例です:Compiler Explorer
ポインタまたは参照によって抽象クラスを構築することはできますか? – DeiDei
@DeiDei私はそれを覚えていませんが、理由を説明します。 編集:明確にするために、実際には参照だけでなくオブジェクトを作成しています。 – Matt
"一生の延長の一種" - 人生は完了の時に終わります。 - それ以外は何も起こっていないので、あなたは未定義の行動を続けています。 – Soren