C++ 从指向非常量的指针到指向常量的指针的引用

C++ 从指向非常量的指针到指向常量的指针的引用,c++,pointers,reference,type-conversion,constants,C++,Pointers,Reference,Type Conversion,Constants,在阅读了24个类似的问题之后,我仍然没有找到解决根本问题的方法。我可以很容易地解决这个问题,但我真的很想了解这个问题 我们谈论的是C++。 由于提供输入的库,char*的使用是一个限制 我有一个工厂F的公共静态成员方法: static A *create(const char *&s); 当我从另一个B类调用它时,如下所示: char *s = data; A a = F::create(s); 由于“参数无效”,我收到一个错误 当我将变量声明更改为 const char *s =

在阅读了24个类似的问题之后,我仍然没有找到解决根本问题的方法。我可以很容易地解决这个问题,但我真的很想了解这个问题

<>我们谈论的是C++。 由于提供输入的库,char*的使用是一个限制

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

static A *create(const char *&s);
当我从另一个B类调用它时,如下所示:

char *s = data;
A a = F::create(s);
由于“参数无效”,我收到一个错误

当我将变量声明更改为

const char *s = data;
一切都很好

好的,您可以为常量参数提供一个非常量变量,因为常量参数是一种保证,而不是一种要求。这似乎对引用无效

Create使用字符,因此指针不能为常量;s随后立即提供给类似的功能。数组不应该被编辑,因此我想要一个常量数组。对指针的引用似乎和我想要的完全一样


我假设一些内部语言规范禁止我的初始解决方案,但我真的很想理解为什么

您不能这样做,因为这是不安全的-它会让您更改非常量指针,使其实际指向常量对象

考虑如果允许会发生什么:

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

create
也是一个库函数吗?如果不是,你不能总是从你的库提供的<代码> char */COD>中制作C++ <代码>字符串>代码>吗?我可以,但是我的代码不能被重用或者因为公司的策略而变成一个库。然而,我已经解决了这个问题。不过,我还是不明白根本原因。通过引用传递指针没有多大意义。如果您将函数定义更改为接受const char*@Anton:您就可以了,但这确实很有意义。我正在编辑方法中的指针以使用字符。数据指针保持不变,之后用于删除。这样我就可以给多个方法提供相同的指针,每个方法都使用字符串的一部分。它类似于指针的指针…谢谢。这就解释了。我对常量参数的概念似乎不正确。我不能再把它当作保证了。