ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 03:19

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年7月20日(水) 18:22 
オフライン

登録日時: 2005年7月20日(水) 17:59
記事: 12
コード:
Dim a As Long

Class test
Public
	Sub test()
		a = 1
	End Sub
End Class

Dim obj[1] As *test
obj[a] = New test()

debug
オブジェクトポインタの配列で配列番号にaという変数を使用しています。
aの内容が0の状態で obj[a] = New test() などとして、testクラスのコンストラクタでaの内容を書き換えると、代入されるオブジェクトポインタの配列番号はコンストラクタで書き換えられた方が使われてしまいます。

これは仕様でしょうか?バグでしょうか?


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月20日(水) 20:42 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
それは仕様です。大抵のプログラミング言語では、下記のような演算順序が採用されていることと思います。ABも、その順序に従う形になります。

右辺値を演算。結果をレジスタまたはスタックに保有

左辺値である変数のアドレスを取得。このタイミングで配列要素の演算が行われる

取得したアドレスに保有中の演算結果を書き込む

結局のところ、ここらへんの細かい仕様は、言語によって様々な場合があるので、絶妙なタイミングで変化するグローバル変数を参照するようなコードは避けることをお勧めします。


通報する
ページトップ
 記事の件名: 仕様ですか
投稿記事Posted: 2005年7月20日(水) 22:39 
オフライン

登録日時: 2005年7月20日(水) 17:59
記事: 12
わかりやすい説明有難うございます。
結構自分は長いこと勘違いしてました。
普通に関数で同じことをやってみても同じことになりますね。

オブジェクトを生成するたびに次の配列番号を変更していくようにしたかったのですが、コンストラクタでなくても普通に生成後に処理すればよかっただけなんですよね…。

とにかく有難うございました。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[7人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean