関数戻り値部分でのクラス定義
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宣言の後ろにセミコロン抜けてるよ」というエラーが出力された.
文法的にはどっちが正しいのだろう?