どの環境でも、明示的にコンストラクタを呼び出せる? – プログラミング – Home

どの環境でも、明示的にコンストラクタを...
 
通知
すべてクリア

[解決済] どの環境でも、明示的にコンストラクタを呼び出せる?


しん
 しん
(@しん)
ゲスト
結合: 25年前
投稿: 113
Topic starter  

今、タイトルに書いた事が出来るか、下のコードで実験をやっています。
が、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 );
}

どうか宜しくお願いします。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

別掲示板の類似スレ

[cppll:10198] コンストラクタからコンストラクタを呼び出す
http://www.tietew.jp/cppll/archive/10198


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

妥当じゃないので、やってはいけません。(VCは通ってしまうだけでしょう)

クラス外からの呼び出しでは、placement newが使えますが、
クラス内であれば、共通の呼び出し関数を作ってください。
(単に A::A(int foo=0) みたいなデフォルト引数だけで方が済むのかも<要件次第)

> 別掲示板の類似スレ
# 蛇足:野暮な突っ込み>cppll(επιστημηさんのフリーML)の過去ログですね。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> (単に A::A(int foo=0) みたいなデフォルト引数だけで方が済むのかも<要件次第)

(単に A::A(int foo=0) みたいなデフォルト引数だけで片が付くのかも<要件次第)
または(用が済むのかも)ですかね。国語的には。


返信引用
しん
 しん
(@しん)
ゲスト
結合: 25年前
投稿: 113
Topic starter  

やっちゃダメ、なのですね。
しかし「動作未定義」だったとは...。

即刻、修正します。有難うございました


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました