FreeBASIC マニュアルのトップに戻る

FreeBASIC PgByrefFunction

目次→実行時ライブラリー参考→手続きBYREF (function results)←オリジナル・サイト

BYREF (関数結果) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

関数結果が、参照によって返されることを明示します。

構文:
Function name ( parameter-list ) Byref As datatype

記述:
関数結果が、値によってではなく、参照によって返される原因になります。
Byref を返している関数は、値を返すために、コピーを作る代わりに、変数のアドレスを返します。
これは、関数を呼び出すものが、関数結果が指す変数を修正することを許します。

Byref が指定されないならば、デフォルトは、値によって関数結果を返すことになっています。

Byref 結果の関数は、関数から局所変数を返してはいけません。これらの関数は、関数から帰ると同時に滅ぼされるからです。そして、関数へのどんなポインターや参照も、無効にします。
安全なコードを書くことを助けるために、Function = x (または name = x) 代入と、Return x 命令文で、局所変数が使われるとき、コンパイラはエラー・メッセージを示します。

注: 分析曖昧さを解決するために、'=' シンボルを用いた代入式の左側に、関数が1つの単独の引数を呼ぶとき、関数(参照によって返される)の結果は、括弧に入れなければなりません。
代入のために、'=' の代わりに、'=>' を使うことができます。
これは、(括弧なしの)曖昧さを解析することを避けるために許している、イニシャライザに関してと同じです。
引数リストは、 たとえ空でも、常に括弧で囲まなければなりません。

演算子(メンバー、あるいはグローバル)は、また、関数として使用された時、同じ構文を使って、参照によって結果を返す能力があります。

例:
Function min( ByRef I As Integer , ByRef J As Integer ) ByRef As Integer
    '' 最小の整数が、参照によって返されます。コピーは作成されません。
    If I < J Then
        Return I
    Else
        Return J
    End If
End Function

Dim As Integer A = 13, B = 7
Print A, B
Print min( A , B )
min( A , B ) = 0
Print A, B


Function f( ) ByRef As Const ZString
    '' この文字列リテラルは、(メモリの中で静的に割り付けられたので)参照によって返されます。コピーは作成されません。
    Function = "abcd"
End Function

Print f( )


Dim Shared As String s

Function f1( ) ByRef As String
   '' この可変長文字列は、参照によって返されます。コピーは作成されません。
   Function = s
End Function

Function f2( ByRef _s As String ) ByRef As String
   '' この可変長文字列は参照(入力と出力)によって返されます。コピーは作成されません。
   Function = _s
End Function


s = "abcd"
Print s

f1( ) = f1( ) & "efgh"
Print s

'' 左端の括弧は、ここでは必須です。
( f2( s ) ) = f2( s ) & "ijkl"
Print s

'' 左端の括弧はここでは必要ありません。
f2( s ) => f2( s ) & "mnop"
Print s


Function power2( ByRef _I As Integer ) ByRef As Integer
   _I *= _I
   '' この整数は参照によって返されます。コピーは作成されません。
   Function = _I
End Function

Dim As Integer I = 2
power2( power2( power2( I ) ) )  '' 関数 リターン-byref を重ねることは、右と等価です。 ((I*I)*(I*I))*((I*I)*(I*I)) = I^8
Print I



QBからの違い:

参照:

手続きに戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2019-02-26 08:22:25
日本語翻訳:WATANABE Makoto、原文著作者:DkLwikki

ホームページのトップに戻る

表示-非営利-継承