为什么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个可以采用完全相同的参数,最后一个只是任意决定使其内部副本保持不变(实现细节)。第一个不能指向常量,所以它们真的是不同的功能,从外部看。 –