为什么我可以修改const __restrict指针而不是typdef'd版本?

时间:2013-04-17 17:48:02

标签: objective-c pointers const restrict-qualifier

注意:我正在使用最新版Xcode附带的目标C编译器。

为什么这是合法的:

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 个答案:

答案 0 :(得分:0)

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

邑。修改const指针是非法的。但是,将非const指针修改为const的指针则不是。我觉得你很困惑

const float *foo

float *const foo

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