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 方法至少有一个(隐式)指针参数:self. 它始终作为消息传递 ( objc_msgSend()) 的一部分进行检查。这就是使 Objective-C 动态化的原因。

于 2013-11-25T18:57:57.163 回答