2013-04-17 88 views
0

注意:我正在使用Xcode最新版本附带的目标C编译器。为什么我可以修改const __restrict指针而不是typdef'd版本?

为什么说这是合法的:

void verySpecial(const float* __restrict foo, const int size) { 
    for (int i = 0; i < size; ++i) { 

     // ... do special things ... 

     ++foo; // <-- Should be illegal to modify const pointer? 
    } 
} 

但是,如果我使用typedef,它做什么,我认为它应该做的。

typedef float* __restrict RFloatPtr; 

void verySpecial(const RFloatPtr foo, const int size) { 
    for (int i = 0; i < size; ++i) { 

     // ... do special things ... 

     ++foo; // <-- Now this is a compiler error. 
    } 
} 

那么,什么是在typedef定义不同的情况下,什么不我明白?阅读__restrict会让我的大脑受到伤害,我甚至不确定这是否重要。

+1

First Apple's没有使用gcc或llvm的objective-c编译器。 –

+1

@AnoopVaidya哼,什么? – 2013-04-17 17:50:07

+0

无论如何。这是XCode附带的编译器。应用商店中最新版本的XCode。 –

回答

0
++foo; // <-- Should be illegal to modify const pointer? 

Yap。修改一个const指针是非法的。但是,将非const指针修改为const不是。我想你混淆

const float *foo 

float *const foo 

而且,你当然不能修改restrict指针,因为它没有任何意义。 restrict告诉编译器指针保证不与其他指针重叠。如果您减少或增加指针,则此假设可能不再成立。

相关问题