注意:我正在使用最新版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让我的大脑受到伤害,我甚至不确定这里有什么问题。
答案 0 :(得分:0)
++foo; // <-- Should be illegal to modify const pointer?
邑。修改const指针是非法的。但是,将非const
指针修改为const
的指针则不是。我觉得你很困惑
const float *foo
与
float *const foo
另外,当然你不能修改restrict
指针,因为它没有意义。 restrict
告诉编译器指针保证不与其他指针重叠。如果递减或递增指针,则此假设可能不再成立。