3

__attribute__((const))関数実行の純度をチェックするためのGCC属性です。これはClangでサポートされていると思いますが、これをメソッドに入れると、機能しないようです。

@interface C1
- (id)method1 __attribute__((const));
@end


int a = 0;

@implementation C1
- (id)method1 __attribute__((const))
{
    a++;
    return nil;
}
@end

上記のコードは警告やエラーを生成しません。

このアトリビューションはClangで機能していますか?または、これを機能させるにはどうすればよいですか?

4

2 に答える 2

8

属性は関数の純度をチェックconstしません。関数の純度を宣言するため、オプティマイザーは関数の呼び出しを排除できます。関数が純粋であることを実際に確認するのはあなた次第です。

于 2012-12-03T08:14:07.227 に答える
2

メソッドの宣言はconst、ランタイムのメッセージパッシングメカニズムと矛盾するため、Objective-Cでは機能しません。のドキュメントは次のようにconst述べています。

ポインタ引数を持ち、ポイントされたデータを検査する関数は、constとして宣言してはならないことに注意してください。

すべてのObjective-Cメソッドには、少なくとも1つの(暗黙の)ポインター引数がありますself。メッセージパッシング()の一部として常に検査されますobjc_msgSend()。それがObjective-Cを動的にするものです。

于 2013-11-25T18:57:57.163 に答える