结构 Foo { char * DataPtr; };
class ISomeInterface {
public:
Foo GetFoo( ) const;
Foo GetFoo( );
};
Foo::DataPtr
是指向对象的内部缓冲区的指针ISomeInterface
。有没有办法确保Foo::DataPtr
const 版本返回的ISomeInterface::GetFoo
是 a const char *
?
结构 Foo { char * DataPtr; };
class ISomeInterface {
public:
Foo GetFoo( ) const;
Foo GetFoo( );
};
Foo::DataPtr
是指向对象的内部缓冲区的指针ISomeInterface
。有没有办法确保Foo::DataPtr
const 版本返回的ISomeInterface::GetFoo
是 a const char *
?
你需要一个
struct ConstFoo {
const char* DataPtr;
};
为了这。C++ 中的 const 不是传递的。(这也是为什么你有iterator
and const_iterator
。)
一个结构
struct Foo {
char * DataPtr;
}
不一样
struct Foo {
const char * DataPtr;
}
所以你无法区分你想要的方式。
您可以使 constGetFoo()
返回一个 constFoo
对象(我怀疑这不是您想要的,因为它会使所有成员变量都变为 const),或者使用在 const 调用中返回的const char * DataPtr
(say ) 创建另一个结构。FooConst
您可以尝试更改您的设计Foo
并“隐藏”对DataPtr
背后功能的访问。例如:
class Foo {
char * DataPtr;
public:
//just some examples
void doThis() const {}
void doThat() {}
};
class ISomeInterface {
public:
const Foo GetFoo( ) const { return Foo(); }
Foo GetFoo( ) { return Foo(); }
};
...
const Foo foo1 = ISomeInterface().GetFoo();
foo1.doThis();
foo1.doThat(); //error
Foo foo2 = ISomeInterface().GetFoo();
foo2.doThis();
foo2.doThat();
提供定义哪些操作是 const 和那些不是您的函数可以避免重复您的操作Foo
并获得您似乎瞄准的 const 正确性限制。