請考慮下面的代碼。const正確性和返回值 - C++
struct foo
{
};
template<typename T>
class test
{
public:
test() {}
const T& value() const
{
return f;
}
private:
T f;
};
int main()
{
const test<foo*> t;
foo* f = t.value();
return 0;
}
t
是const
變量和value()
是常數成員函數,它返回const T&
。 AFAIK,const
類型不能分配給非常量類型。但foo* f = t.value();
如何編譯好。這是怎麼回事,我如何確保value()
只能分配到const foo*
?
編輯
我發現,這是在使用模板上發生的情況。以下代碼按預期工作。
class test
{
public:
test() {}
const foo* value() const { return f; }
private:
foo* f;
};
int main()
{
const test t;
foo* f = t.value(); // error here
return 0;
}
爲什麼使用模板時會出現問題?
謝謝。但我還不夠清楚。國際海事組織的意見,'價值()'返回'const T&'只能被分配給另一個'const'類型。但在這種情況下,編譯器安全地允許轉換。另外在我的情況下,我不能'測試'。 –
2010-02-20 18:49:50
@Appu這是指向常量的指針和指向非常量的常量指針的區別。不知道你爲什麼不能「測試」。 –
2010-02-20 18:59:23
請參閱編輯。我有一個非const成員'f'並且從它返回'const'。在這種情況下,編譯正確地抱怨。看起來使用模板時行爲不同。 – 2010-02-20 19:02:09