__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?或者我该怎么做才能让它发挥作用?
答案 0 :(得分:8)
const
属性不检查函数的纯度。它声明函数的纯度,因此优化器可以消除对函数的调用。实际上你可以确保这个功能是纯粹的。
答案 1 :(得分:2)
声明方法const
在Objective-C中不起作用,因为它与运行时的消息传递机制相矛盾。 const
的{{3}}说:
请注意,具有指针参数并检查指向的数据的函数不得声明为const。
每个Objective-C方法至少有一个(隐式)指针参数:self
。作为消息传递(objc_msgSend()
)的一部分,总是进行检查。这就是Objective-C动态的原因。