関数戻り値部分でのクラス定義
C++では,関数の戻り値の型を関数宣言/定義時に指定する.
Hoge func(){ Hoge x; return x; }
こんな感じに指定すると,先頭部分で関数の戻り値がHoge型だということがわかる.
クラスの定義は,
class Hoge{ public: Hoge(){} void hello(){ std::cout << "Hello" << std::endl; } };
という感じで行う.今回,これをくっつけてみたら,コンパイルが通った.
class Hoge{ public: Hoge(){} void hello(){ std::cout << "Hello" << std::endl; } } func(){ Hoge x; return x; } int main(){ Hoge a = func(); a.hello(); // Helloが出力される }
Visual Studio 2008では,コンパイルが通ったけど,gcc 4.4.5ではコンパイル通らなかった.gccでは,「class宣言の後ろにセミコロン抜けてるよ」というエラーが出力された.
文法的にはどっちが正しいのだろう?