结构 Foo { char * DataPtr; };
class ISomeInterface {
public:
Foo GetFoo( ) const;
Foo GetFoo( );
};
Foo::DataPtr是指向对象的内部缓冲区的指针ISomeInterface。有没有办法确保Foo::DataPtrconst 版本返回的ISomeInterface::GetFoo是 a const char *?
结构 Foo { char * DataPtr; };
class ISomeInterface {
public:
Foo GetFoo( ) const;
Foo GetFoo( );
};
Foo::DataPtr是指向对象的内部缓冲区的指针ISomeInterface。有没有办法确保Foo::DataPtrconst 版本返回的ISomeInterface::GetFoo是 a const char *?
你需要一个
struct ConstFoo {
const char* DataPtr;
};
为了这。C++ 中的 const 不是传递的。(这也是为什么你有iteratorand 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 正确性限制。