爲什麼const在應用於struct指針而不是struct時創建不同的簽名?爲什麼const有時是函數簽名的一部分?
E.g.
typedef struct test_s {
int foo;
} test;
void foo(test *ptr){
return;
}
// This is ok
void foo(const test *ptr){
return;
}
void foo(test t){
return;
}
//This is an error
void foo(const test t){
return;
}
(上gcc版本4.9.2測試)
更具體而言,這是爲什麼認爲底部一個是錯誤時,一對與該指針不是錯誤。引用的重複問題(Functions with const arguments and Overloading)似乎也會爭辯說指針的情況應該是重複的。
根據該函數可以採用的參數來考慮。最後2個可以採用完全相同的參數,最後一個只是任意決定使其內部副本保持不變(實現細節)。第一個不能指向常量,所以它們真的是不同的功能,從外部看。 –