为什么以下程序会发出警告?
注意:很明显,向需要const指针的函数发送普通指针不会发出任何警告。
#include <stdio.h>
void sam(const char **p) { }
int main(int argc, char **argv)
{
sam(argv);
return 0;
}
我收到以下错误,
In function `int main(int, char **)':
passing `char **' as argument 1 of `sam(const char **)'
adds cv-quals without intervening `const'
答案 0 :(得分:10)
此代码违反了const正确性。
问题是这段代码基本上不安全,因为你可能无意中修改了一个const对象。在"Why am I getting an error converting a Foo**
→ Foo const**
?"
class Foo {
public:
void modify(); // make some modify to the this object
};
int main()
{
const Foo x;
Foo* p;
Foo const** q = &p; // q now points to p; this is (fortunately!) an error
*q = &x; // p now points to x
p->modify(); // Ouch: modifies a const Foo!!
...
}
(来自Marshall Cline的C ++ FAQ Lite文档,www.parashift.com/c++-faq-lite/)
您可以通过限定两个间接级别来解决问题:
void sam(char const* const* p) { }