将指向常量的指针的引用与指向非常量的指针放在一起
Seating a reference to pointer to const from a pointer to non-const
在阅读了二十几个类似的问题后,我仍然没有找到解决潜在问题的方法。我可以轻松解决问题,但我真的很想了解问题。
我们正在谈论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.
}
相关文章:
- 将常量指针引用绑定到非常量指针
- 如何使用数据对象上的常量指针初始化类
- 为什么我收到"从常量指针到指针的转换无效?
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- 为什么C++中没有常量引用,就像常量指针一样?
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 将常量指针强制转换为非常量
- 带有常量指针的矢量构造函数示例
- 什么是常量指针常量引用类型的参数?(const X* const & p)
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 常量指针上的混乱
- 使用 static_cast 时指向常量指针的原因
- 如何在C++中定义常量指针数组?
- 测试此指针的常量指针性质
- 当常量指针用作函数的参数时
- C++ - 无法将顶部常量指针分配给另一个非常量指针
- 在不同类型之间转换常量指针
- 解构常量指针?
- 为什么 std::vector<>::const_reference 可以转换为非常量指针?