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. 聲明的NSString常量
- 4. Ada中的常量聲明
- 5. 阿達:常量聲明
- 6. p在常量聲明
- 7. 雙變量不在聲明中?
- 8. 在R中聲明常量變量
- 9. 使用未定義的常量聲明的 - 假設「聲明」
- 10. CSS雙聲明(jQuery的)
- 11. 雙,浮法和長聲明
- 12. 常量聲明 - 語言差異?
- 13. 如何聲明一個常變量
- 14. 聲明浮點常量的錯誤
- 15. Windows VK_常量是如何聲明的?
- 16. 在項目中聲明常量
- 17. C++函數聲明常數變量
- 18. 大括號的Javascript常量聲明
- 19. 聲明靜態常量在功能
- 20. OpenOffice basic:聲明一個數組常量
- 21. 在對象聲明中使用常量?
- 22. 在運行時聲明常量(Java)?
- 23. JUNIT - 聲明異常
- 24. 變量聲明?
- 25. 聲明變量
- 26. 聲明變量
- 27. 聲明變量
- 28. 變量聲明
- 29. 變量聲明
- 30. 聲明變量
它應該是'const的無符號字符* const' – wich 2010-01-28 16:58:58
IIRC無符號的字符常量* const的也是有效的 – 2010-01-28 17:26:32
不,你沒有看到這樣的聲明「經常」。該聲明實際上是無效的,因此是沒有意義的。請在發佈帶有問題的代碼時加倍小心。 – AnT 2010-01-28 17:33:47