今、タイトルに書いた事が出来るか、下のコードで実験をやっています。
が、g++で文法エラーになってしまいました。
そこで、下の「 this->A::A() 」のような明示的なコンストラクタ呼び出しは、
言語仕様上 合法か否かを教えて頂けないでしょうか?
struct A
{
A(){}
#ifdef WIN32
A( int ){ this->A::A(); } // VC++7.1、IC++8では期待通りに動く
#else
A( int ){ this->A::A(); } // g++4では文法エラー。this->を消せばコンパイル可。
// が、自動変数の一時オブジェクトが作られ、それに
// 対しA::A()が適用される。それでは意味がない!
#endif
};
void main()
{
A a( 0 );
}
どうか宜しくお願いします。
妥当じゃないので、やってはいけません。(VCは通ってしまうだけでしょう)
クラス外からの呼び出しでは、placement newが使えますが、
クラス内であれば、共通の呼び出し関数を作ってください。
(単に A::A(int foo=0) みたいなデフォルト引数だけで方が済むのかも<要件次第)
> 別掲示板の類似スレ
# 蛇足:野暮な突っ込み>cppll(επιστημηさんのフリーML)の過去ログですね。
> (単に A::A(int foo=0) みたいなデフォルト引数だけで方が済むのかも<要件次第)
(単に A::A(int foo=0) みたいなデフォルト引数だけで片が付くのかも<要件次第)
または(用が済むのかも)ですかね。国語的には。
やっちゃダメ、なのですね。
しかし「動作未定義」だったとは...。
即刻、修正します。有難うございました