どういう意味?


92

私には2つのクラスがあります。

class base {
    virtual void foo() {};
};

class derived : public base {
    void foo() { base::foo(); }
};

私はミスを犯したと書いたbase:foo();の代わりにbase::foo();。コードはコンパイルされて実行されましたが、segfaultedでした。

どうすればGoogleでそれをGoogleにできるかわからないし、それが何かはわかりませんが、とても興味があります。それはどういう意味ですか?

base:foo();

それが重要な場合:

class base : public QAbstractGraphicsShapeItem

32
それはだラベル
クリス

20
これは、警告をオンにすると、参照、助けケースで、それは生きる ... warning: label 'base' defined but not used [-Wunused-label]:おそらく、我々はこの質問のページを尋ねる追加する必要があります... あなたは警告をオンにしようとしたことがあり
Shafik Yaghmour

6
スタックオーバーフローで終了しました。なんて相応しい!
Laurent LA RIZZA

回答:


125
void foo() { base:foo(); }

以下と同等です。

void foo()
{
   base: // An unused label.
   foo(); // Calls the function again, resulting in infinite recursion.
}

無限再帰により、関数はスタックオーバーフローを引き起こします。


1
はい、foo()コールスタックで多くの呼び出しがあったときに、その間違いを見つけました。おかげで
railmisaka

これに関する警告はgcc / clangなどで利用できますか?
センセーションを解消

10
@Serthyを使用すると-Wall、次の警告メッセージが表示されます:socc.cc:3 : 4:警告:ラベル 'base'が定義されていますが使用されていません[-Wunused-label] base://未使用のラベル。
R Sahu、2015年

10
@Serthy:IIRC Visual Studioには、「すべての制御パスで再帰的」という警告が表示されます。
MSalters 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.