我有一个Foo的结构:
struct Foo
{
};
我有一个Bar结构:
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传递给构造函数,然后像我传递对结构的引用一样对它们执行某些操作?然后,我遇到了尝试将非const指针的值设置为const指针的问题。
我希望这个问题有道理......
编辑:我应该使用引用而不是指针吗?
答案 0 :(得分:3)
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; }
};
一切都会好好编译:{{1}}和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
成员。