在阅读了两个类似的问题之后,我仍然没有找到解决潜在问题的方法。我可以轻松解决问题,但我真的很想了解问题。
我们正在谈论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参数不是必须的保证。这对于引用似乎无效。
Create使用字符,因此指针不能为const。之后,s将立即提供给类似功能。该数组不应该被编辑,因此我想拥有一个const数组。对指针的引用似乎与我想要的完全一样。
我假设一些内部语言规范禁止我使用最初的解决方案,但我真的很想知道为什么!
您不能这样做,因为它是不安全的-它会让您更改非const指针,因此它实际上指向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.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句