限制現在我做了一些代碼,並使用了關鍵字限制一些問題。C帶的typedef
typedef int* pt;
int foo(pt a, pt b)
{
... /* stuff */
}
如果我想限制a和b,該怎麼辦?代碼如下失敗:
typedef int* pt;
int foo(pt restrict a, pt restrict b)
{
... /* stuff */
}
在此先感謝。
限制現在我做了一些代碼,並使用了關鍵字限制一些問題。C帶的typedef
typedef int* pt;
int foo(pt a, pt b)
{
... /* stuff */
}
如果我想限制a和b,該怎麼辦?代碼如下失敗:
typedef int* pt;
int foo(pt restrict a, pt restrict b)
{
... /* stuff */
}
在此先感謝。
您需要一個「受限制的指針指向整數」int * restrict p
不是「指向受限整數的指針」restrict int *p
因此您需要創建另一個typedef。你不能「到達」原來的。
編輯:雖然這是真的,你無法抵達的typedef和修改內部總是應用在頂層,在這種情況下,原來你要的restrict
在頂層。這是一個什麼樣的人通常運行與const
逆:typedef char *char_ptr
意味着const char_ptr
(或char_ptr const
,他們當量)都表示「恆字符指針」而不是「指針定焦」,這是人們所希望的。 (另見本SO主題:C++ typedef interpretation of const pointers)
因此,在這種情況下,我覺得typedef int *pt
是否意味着restrict pt
意味着int * restrict pt
。這是很容易驗證,因爲GCC會抱怨爲restrict int *x
而不是restrict pt x
「無效使用的‘限制’」。
上帝......我需要大量的黑客然後 – rogi 2010-11-13 23:46:30
你能否請克萊裏?爲什麼'pt restrict'不表示'int * restrict'類型?我認爲這個答案是錯誤的。 – 2010-11-13 23:54:38
@Johannes:假設'restrict' 「傳播」 一樣'const',你是正確的:'static_assert(標準:: is_same
有一個快速瀏覽和閱讀此類似SO question存在,代碼會是這樣,作爲關鍵字「限制」在C++編譯器不保留的關鍵字,通過接受的答案指示在上述linky,無論是__restrict
或__restricted__
,再次檢查你的編譯器...
typedef int* __restrict pt;
int foo(pt a, pt b)
{
... /* stuff */
}
嗯這可能會幫助很多。謝謝! – rogi 2010-11-14 00:06:09
我在[一個問題](http://stackoverflow.com/q/43631062/2542702)中使用了你的答案,每個人都說這是一個非常糟糕的主意。你能評論我的問題嗎? – 2017-04-27 07:04:46
你需要「的失敗的碼」更準確地說,你是什麼意思。 – 2010-11-13 23:42:34
FWIW,你的代碼用GCC編譯得很好。 – 2010-11-14 00:13:24