Q
雙常量聲明
8
A
回答
17
第一個常量說,所指向的數據是不變的,不得改變,第二個表示指針本身不可更改:
char my_char = 'z';
const char* a = &my_char;
char* const b = &my_char;
const char* const c = &my_char;
a = &other_char; //fine
*a = 'c'; //error
b = &other_char; //error
*b = 'c'; //fine
c = &other_char; //error
*c = 'c'; //error
1
這使得它成爲一個const值的const指針,而不是指向const值的可變指針或指向可變值的const指針。
3
這是一個常數指針,指向一個常數無符號字符。你不能改變指針或它指向的東西。
1
const * unsigned char const buffer
意味着您不能修改指針buffer
,也不能修改buffer
指向的內存。
2
在像const * const T
聲明,第一const
(在*
之前)意味着什麼指針指向在是const
(即它是一個指向const T
)。在*
之後的const
意味着指針本身是const
(即,不能被修改爲指向任何其他)。
1
一對夫婦的文章,幫助您瞭解C++ const正確性:
2
假設const爲unsigned char * const
大家都是正確的,它是一個const指針,指向一個const無符號字符。
C++類型主要讀取從右到左除非在最左邊有任何修飾符,然後這些從左到右讀取。
7
類型聲明應該(?)讀取RTL。 const
修改其左側的東西,但規則很複雜,因爲您可以同時寫入const T
和T const
(它們的意思是相同的)。
T * const
是恆定指針可變ŤT & const
將恆定參照可變Ť,除了參考文獻是由定義常量T const *
是可變指針常數TT const &
是參考常數TT const * const
是常數指針常數T
+0
謝謝,RTL閱讀建議對於這些特性情況很有用。 – SyBer 2010-01-29 22:13:03
相關問題
- 1. 在常量聲明
- 2. 聲明字符串常量
- 3. Ada中的常量聲明
- 4. p在常量聲明
- 5. 聲明數組常量
- 6. 聲明常量枚舉
- 7. Javascript原型常量聲明
- 8. 聲明常量沒有值
- 9. 阿達:常量聲明
- 10. 與塊常量聲明
- 11. 聲明的NSString常量
- 12. 雙變量不在聲明中?
- 13. 不明白常量方法聲明
- 14. 在R中聲明常量變量
- 15. 爲什麼這個常量常量常量聲明中無效
- 16. EXTERN常量,這是聲明,這是向前聲明
- 17. 使用未定義的常量聲明的 - 假設「聲明」
- 18. 雙,浮法和長聲明
- 19. C++雙聲明/定義?
- 20. CSS雙聲明(jQuery的)
- 21. 無法聲明自引用常量
- 22. 如何在SWI-Prolog中聲明常量?
- 23. 大括號的Javascript常量聲明
- 24. 靜態常量類成員聲明
- 25. OpenOffice basic:聲明一個數組常量
- 26. 在項目中聲明常量
- 27. 常量聲明 - 語言差異?
- 28. 使用聲明和常量重載
- 29. 在對象聲明中使用常量?
- 30. 用C語言聲明常量
它應該是'const的無符號字符* const' – wich 2010-01-28 16:58:58
IIRC無符號的字符常量* const的也是有效的 – 2010-01-28 17:26:32
不,你沒有看到這樣的聲明「經常」。該聲明實際上是無效的,因此是沒有意義的。請在發佈帶有問題的代碼時加倍小心。 – AnT 2010-01-28 17:33:47