正在传递常量指针..我需要做吗
Passing a const pointer... do I need to do it?
我有一个Foo:的结构
struct Foo
{
};
我有一个结构的酒吧:
struct Bar
{
};
它们由另外两个结构处理,它们分别维护(添加/删除)一个指针数组:
struct FooContainer
{
Foo** FooList;
// add(), remove() etc
};
struct BarContainer
{
Bar** BarList;
// add(), remove() etc
};
现在,我想要的是另一个名为Baz的结构,它(以一对多的方式)将Foo链接到Baz。我不能(由于这里没有解释的原因)通过索引引用它们,它必须通过指针/引用。
类似这样的东西:
struct Baz
{
Foo* foo;
Bar* bar;
};
如果我想给Baz添加一个构造函数,它接受这些非常量指针,我该怎么做?
Baz应该允许我更改它指向的Foo和Bar的哪个实例……所以它的指针不希望是const。
我是否将指针作为const传递到构造函数中,然后像传递对结构的引用一样对它们执行某些操作?然后,我在尝试将非常量指针的值设置为常量指针时遇到了问题。
我希望这个问题有道理。。。
编辑:我应该使用引用而不是指针吗?
Baz应该允许我更改它指向的Foo和Bar的哪个实例……所以它的指针不希望是
const
。
这是正确的,您不希望存储常量指针。然而,它并不阻止您存储指向const
的指针,这是不一样的。
这听起来很混乱,所以这里有一个使用Baz
示例的示例:
struct Baz
{
const Foo* foo;
const Bar* bar;
Baz(const Foo* newFoo, const Bar* newBar) : foo(newFoo), bar(newBar) {}
void setFoo(const Foo* newFoo) { foo = newFoo; }
void setBar(const Bar* newBar) { bar = newBar; }
};
一切都会编译得很好:foo
和bar
指向的Foo
和Bar
是const
,而不是指针本身,这让您可以随心所欲地更改指针。
另一方面,这不会编译:
struct Baz
{ // Note how const has moved to the other side of the asterisk
Foo* const foo;
Bar* const bar;
Baz(Foo* newFoo, Bar* newBar) : foo(newFoo), bar(newBar) {}
void setFoo(Foo* newFoo) { foo = newFoo; } // BROKEN!!!
void setBar(Bar* newBar) { bar = newBar; } // BROKEN!!!
};
现在,指针(而不是"指针对象")是const
,阻止您更改foo
或bar
成员。
相关文章:
- 将常量指针引用绑定到非常量指针
- 如何使用数据对象上的常量指针初始化类
- C++中的指针和常量问题不大
- 为什么我收到"从常量指针到指针的转换无效?
- 当成员值从指针更改为非指针时,C++常量问题
- 使用双指针传递 2D 常量数组
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 初始化指针的常量向量
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 什么是常量指针常量引用类型的参数?(const X* const & p)
- 无法将"常量指针常量"传递给常量引用
- C++:如何创建一个临时对象,包含一个指针 - 常量或非常量,具体取决于上下文
- 具有函数指针常量数组的 C++ 模板化静态类
- 这个constexpr整数不是空指针常量吗
- 使指针常量C++
- C++11在stl容器中共享指针常量
- 空指针常量转换为右值
- 在参考 (T&) 和常量指针 (T* 常量) 之间进行选择