在阅读了二十多个类似的问题之后,我仍然没有找到解决潜在问题的方法。我可以轻松解决问题,但我真的很想了解这个问题。
我们在谈论C ++。 由于提供输入的库,char *的使用是一种约束。
我有一个工厂F的公共静态成员方法:
static A *create(const char *&s);
当我从另一个B级这样叫这个:
char *s = data;
A a = F::create(s);
由于参数无效'
,我收到错误当我将变量声明更改为
时const char *s = data;
一切都很好......
AFAIK,你可以为const参数提供一个非const变量,因为const参数是一个保证而不是一个要求。这似乎与引用无效。
创建消耗字符,因此指针不能是const; s之后立即提供给类似的功能。不应该编辑数组,因此我想有一个const数组。对指针的引用看起来就像我想要的那样。
我假设一些内部语言规范禁止我的初始解决方案,但我真的想了解原因!
答案 0 :(得分:2)
你不能这样做,因为它不安全 - 它会让你改变一个非常量指针,所以它实际指向一个const对象。
考虑如果允许会发生什么:
void foo(const char* & s)
{
s = "Pops"; // This is valid.
}
int main()
{
char t[] = "Unicorns";
char* p = t;
foo(p);
p[0] = 'O'; // Oops, modifying a constant object - undefined.
}