0

注意:我使用的是最新版本的 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 让我的大脑受伤,我什至不确定这是否重要。

4

1 回答 1

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

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

const float *foo

float *const foo

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

于 2013-04-17T17:53:01.597 回答