我想了解括號影響表達式中的優先級:爲什麼表達式*(b ++)不首先評估b ++?
int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
auto b = arr;
std::cout << *(++b) << std::endl;
// output : 1
在這段代碼中,我得到預期的輸出,但如果我將其更改爲:
std::cout << *(b++) << std::endl;
// output 0
我得到0
作爲輸出。由於括號,我會先評估b++
,然後再進行解引用。看來我錯了,於是我完全刪除了括號,並用*++b
和*b++
進行了測試,並得到了相同的結果。這意味着括號不會影響這種表達式的優先級嗎?爲什麼這是兩個表達式的結果是equivelant:
*(b + 1)
*(++b)
但它不是與*(b++)
的情況?
因爲這幾乎是後綴增量的*定義*請解釋你認爲它應該做什麼以及與前綴增量('++ b')有什麼不同。 – delnan 2014-09-25 10:39:36
tl; dr'b ++ == b',圓括號不會奇蹟般地改變評估結果。 – user657267 2014-09-25 10:41:47
@delnan是啊我意識到不同之處,但那是我關心的括號。 – 2014-09-25 10:43:56