如果我將共享庫中的現有函式更改
int some_function(char* some_string)
為
int some_function(char const* some_string)
這是一個安全的更改嗎?使用該庫的應用程式是否需要重新鏈接,或者我可以放入替換的 .so 檔案嗎?函式體沒有被修改。該功能不修改some_string。
uj5u.com熱心網友回復:
有四種可能的組合:
- 指向
char引數的指標,將指標傳遞給char - 指向
char引數的指標,將指標傳遞給const char - 指向
const char引數的指標,將指標傳遞給char - 指向
const char引數的指標,將指標傳遞給const char
這只會在情況 2 中中斷代碼,并且如果被呼叫函式嘗試通過指標*寫入。
所有其他組合都很好。
實際上,使用constat 引數,您可以對被呼叫函式而不是呼叫者施加約束。通過const您向呼叫者保證指標處的物件不會被修改。
*) 如果你這樣做,任何嚴肅的編譯器都會警告你。生成的程式可能會在重視記憶體保護的系統上崩潰。(比如Win95沒有,換到Win2K嘗試qsort()陣列const時,很難找到原因。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/530465.html
標籤:C
上一篇:gtkmm-3.0中的Gtk::Widget缺少set_visual()方法
下一篇:如何在結構上執行除法運算子?
