[英]Convert const char* into a char*
當我聲明和定義一個 char* 變量時,我總是想知道編譯器的抱怨。
char* myChar = "Char";
編譯器會抱怨它不能將 const char* 轉換為 char*。 它需要像這樣的顯式轉換
char* myChar = (char*)"Char";
我的第一個問題是這是否是用 const char* 初始化 char* 的正確方法。 我的第二個問題是,為什么編譯器需要這種顯式轉換。 我認為 const char* 和 char* 之間沒有太大區別,除了 const。
在技術層面上, const MyType*
和MyType*
之間存在很大差異,在您的示例中更容易看到char* myChar = "Char";
因為 litteral 字符串可以是 memory 的一部分,可能不會更改,但是通過將其分配給非常量指針,您說您可能會計划更改某些字符。 這種行為是未定義的。 它可能會起作用,它可能會使您的程序意外停止,您甚至不能排除任何其他行為。
通過強制轉換(更喜歡 C++ 中的const_cast
),您是在對編譯器說您知道自己在做什么,而且您知道得更多。 正常的解決方案是const char* myChar = "Char";
甚至const char* const myChar = "Char";
如果您不打算指向其他字符 arrays。
在 C++ 中,如果您想使用字符串,我發現使用std::string
會更加清晰。
對於高級程序員來說,在完整性、安全性和性能方面,const 和 non-const 之間肯定存在很大差異。 當我們想要強調不允許用戶更改特定對象/函數/變量時,我們基本上使用 const。
添加/刪除 const/volatile 修飾符的最佳實踐方法是使用 const_cast 運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.