从指向非const的指针访问指向const的指针

时间:2014-12-10 09:50:19

标签: c++ pointers reference type-conversion const

在阅读了二十多个类似的问题之后,我仍然没有找到解决潜在问题的方法。我可以轻松解决问题,但我真的很想了解这个问题。

我们在谈论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数组。对指针的引用看起来就像我想要的那样。

我假设一些内部语言规范禁止我的初始解决方案,但我真的想了解原因!

1 个答案:

答案 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.
}