FreeBASIC Type (Temporary)
目次→言語リファレンス→変数とデータ型→ユーザ定義型→Type (Temporary)←オリジナル・サイト
ユーザ定義型の、一時的なコピーを作成します。
構文:
result = Type( initializers, ... )
または
result = Type<typename>( initializers, ... )
パラメタ:
initializers
型の初期値(または最初の値のみ)
typename
戻り値:
型の、一時的なコピー。
記述:
一時的な 型 を作成するために、使います。
typename を、明示的に 与えないと、typename は、できれば、用法から推論されます。
一時的なコピーを使うと、それを変数に割り当てたり、それをパラメタとして手続きに渡したり、あるいは、それを手続きからの値として返すことができます。
自身の、あるいは継承した構築子のない型(直接的または間接的に
Object から派生した型も除く)については、すべての型のデータ項目(継承されたものを含む)が、数値プリミティブだけで、デフォルトの初期化子がない場合には、一時的な型構文が許されます。
同時に、型が破壊子を持たないならば、コンパイラは一時コピーを使う代わりに、直接代入をします。
型の
Constructor は、それが 1 つであれば、一時的なコピーを作るとき、呼ばれます。
そして、型の
Destructor は、1つあれば、一時的なコピーを使った直後、呼ばれます。
しかし、構築子がいる場合、一時的型の式は、
typename( initializers, ... ) と単に取り替えられます。
これは、ユーザー定義型の一時的コピーだけでなく、可変長文字列や、どんな数のデータ型(固定長文字列を除くすべての標準的なデータ型)としての、あらかじめ定義されたデータ型の一時的コピーも、作成することができます。
また、すべてのデータ項目(または最初の n のみ)を変更する場合、
With よりも短縮されたショートカットとして使うこともできます。(下の例を参照下さい。)
一時オブジェクトは、文の実行終了時(定義されている場所)に破棄されますが、対応する割り当てられたメモリは解放されず、文が存在するスコープから出るまで使用可能(未使用)のままになります。
注:手続き定義レベルで使われる
Static 修飾子は、一時的な型には適用されません。
例:
Type Example
As Integer field1
As Integer field2
End Type
Dim ex As Example
'' 各項目を設定して、型を満たします
ex.field1 = 1
ex.field2 = 2
'' WITH を使って、各項目を設定して、型を満たします
With ex
.field1 = 1
.field2 = 2
End With
'' 一時的な型で、変数の項目を満たします
ex = Type( 1, 2 )
'' ユーザ定義型を、型を推論できる一時的な型を使って、
'' 手続きに渡します。
Type S
As Single x, y
End Type
Sub test ( v As S )
Print "S", v.x, v.y
End Sub
test( Type( 1, 2 ) )
Sleep
'' ユーザ定義型を、一時的な型を使っている手続きに渡します。
'' 一時的な型では、型があいまいで、型の名前を指定しなければなりません。
Type S
As Single x, y
End Type
Type T
As Integer x, y
End Type
Union U
As Integer x, y
End Union
'' test() の多重定義手続き
Sub test Overload ( v As S )
Print "S", v.x, v.y
End Sub
Sub test ( v As T )
Print "T", v.x, v.y
End Sub
Sub test ( v As U )
Print "U", v.x, v.y
End Sub
'' test( type( 1, 2 ) )
'' だと、不明瞭なので、働きません
'' 代わりの型の名前を、指定します
test( type<S>( 1, 2 ) )
test( type<T>( 1, 2 ) )
test( type<U>( 1 ) )
Sleep
QBからの違い:
参照:
ページ歴史:2023-07-09 04:38:07
日本語翻訳:WATANABE Makoto、原文著作者:VirusScanner