[英]Const-Correctness on complex return value
struct Foo {char * DataPtr; };
class ISomeInterface {
public:
Foo GetFoo( ) const;
Foo GetFoo( );
};
Foo::DataPtr
是指向ISomeInterface
對象的內部緩沖區的指針。 有沒有辦法確保ISomeInterface::GetFoo
的const版本返回的Foo::DataPtr
是const char *
?
你需要一個
struct ConstFoo {
const char* DataPtr;
};
為了這。 C ++中的const不是可傳遞的。 (這也是為什么要使用iterator
和const_iterator
。)
一個結構
struct Foo {
char * DataPtr;
}
與...不同
struct Foo {
const char * DataPtr;
}
因此您無法區分自己的意願。
您可以使const GetFoo()
返回const Foo
對象(我懷疑這不是您想要的對象,因為它將使所有成員變量const),或者使用const char * DataPtr
(例如FooConst
)創建另一個結構,即在const調用上返回。
您可以嘗試更改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操作和非const操作的函數可以避免重復Foo
並獲得您似乎要針對的const正確性限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.