我在这个问题上看过多个问题(例如this one),但没有一个问题解释我所看到的确切行为。
我有两个函数,每个函数都声明并定义为:
void PntCreate(Handle *cv);
void PntCreate(Handle * const cv)
{
//...
}
ErrorCodes wim2Read(const char *fileName, cdCanvas *cv,
int onViewport);
ErrorCodes wim2Read(const char * const fileName, cdCanvas * const cv,
const int onViewport)
{
//...
}
声明和定义仅更改const
限定符。从上面链接的问题中,我了解到可能导致警告,因为它们不完全匹配。但是,我感到好奇的是,警告仅针对PntCreate
显示,但不会针对wim2Read
显示。
这里发生了什么?我认为这可能是因为PntCreate
的参数是一个结构,但wim2Read
的第二个参数也是......
答案 0 :(得分:1)
您的问题是 wim2Read 定义中的 cv 是指向 Canvas 的指针,而不是指向 cdCanvas的指针。 PntCreate 和 wim2Read 中的const
对调用者和实现之间的契约没有影响,因为参数是按值传递的。