将指向常量的指针的引用与指向非常量的指针放在一起

Seating a reference to pointer to const from a pointer to non-const

本文关键字:常量 指针 在一起 非常 引用      更新时间:2023-10-16

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

我们正在谈论C++。char* 的使用是一个约束,因为库提供输入。

我有一个工厂 F 的公共静态成员方法:

static A *create(const char *&s);

当我像这样从另一个 B 类调用它时:

char *s = data;
A a = F::create(s);

由于"参数无效",我收到错误

当我将变量声明更改为

const char *s = data;

一切都很好...

AFAIK,您可以为常量参数提供非常量变量,因为常量参数是保证而不是必需的。这似乎不适用于参考文献。

Create 使用字符,因此指针不能是 const ;s 紧接着提供给类似的函数。数组不应该被编辑,因此我想有一个 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.
}