2016-10-23 17 views
1

コードです:手段:このベースとは何ですか?次のように標準C++キーワード

#include <iostream> 

struct A { 
    virtual void foo() { std::cout << "hello world!" << std::endl; } 
}; 

struct B : public A { 
    void foo() override { base:foo(); } 
}; 

void main() { 
    A* p = new B(); 
    p->foo(); 

    delete p; 
} 

「ベース」とは何ですか?それはC++の標準的なキーワードですか?

プラットフォーム:win10 + vs2015 update3;

プロジェクトタイプ:win32 console project;

+3

コードが示されている場合、 'base:'は 'goto'文で参照できるラベルになります。しかし、それは無意味なラベルなので、実際のコードを表示していないことが分かります。 – Brian

+2

'base:'は単なるラベルです。ちょうど 'xyz:foo();'と書くこともできます。書かれているように、 'B :: foo'は無限再帰に入ります。もしあなたが望んでいれば、 'A :: foo'を呼び出すことはありません。 –

+2

あなたの 'base:'はすべて私たちのものです。すべての 'z-> ig()'を取り除く.'for(; GREAT_JUSTICE;){Move(z-> ig()); } '。 –

答えて

6

多少知らイディオムが

struct B : public A { 
    typedef A base; 
    void foo() override { base::foo(); } 
}; 

のようなものを伴うだろう、あなたが持っているものが、表面的に似ていますが、それはそれではありません。あなたのケースでは、base:は単なるラベルで、何も影響を与えません。あなたが提示したコードが意図的なパズル/ジョークでない限り、実際にはすべての詳細をrememebrしていない人が上に投稿したものを再現しようとする試みかもしれません。

いずれにしても、baseはC++のキーワードではありません(また、VS2015のキーワードでもありません)。

+0

私はあなたの答えに同意しますが、それは質問者コードブロックの問題などを意味しますか?私は長い間C++でコード化していませんでしたが、疑問のようなものがありました(つまり、ソースに適用されたパッチのないあなたの提案が標準 – agg3l

+0

@ agg3lに導入されました)。 –

+0

@RobertColumbia私は疑問符コードブロックと解決策の違いを比較するのは不思議です。それはなぜ問題なのですか? "いくつかの行がスキップされた"のようなものは何も言及されていませんでした – agg3l

2

baseは、C++ではキーワードではありません。特別な意味を持たない普通の識別子です。

base:は、私たちに示したコードとまったく同じですが、参照先がないため、完全に無意味です。 base:foo();の後にgoto base;を(一時的に)追加することで、これを実証することができます。 (私はちょうどそれを自分で試しましたが、追加の診断は得られませんでした。もちろん無限ループになります)

コードの作成者はgotoラベルではないと思われます。 baseは親クラスを参照すると考えていました。おそらくbase:base::のタイプミスです(これはエラーになります - おそらくbaseは他の言語のキーワードです)。

著者が意図した内容を確認することは不可能です。 void main()の使用は、C++で不正です(それはint main()である必要があります)、著者はC++をよく知らないことを示唆しています。彼または彼女はたぶん親クラスを参照して、それを間違って書いて、何かをコンパイルすることを偶然に起こしたことをやろうとしました。

+0

struct base {... foo()...} struct derived:public base {.... base:foo()....} –

+1

@code_farmer:元のコードでは、 'base'は名前ですクラスのなぜあなたはその質問に言及しなかったのですか?質問には、あなたが求めている実際のコードを含める必要があります。 ( '...'が何を表しているかによって 'base:'はおそらくまだgotoラベルです)。これを読んでください:[mcve] –

関連する問題