19
下面的代碼編譯和運行,並且沒有警告是由兩種或GCC鐺發出:我可以在覆蓋虛擬函數的返回類型中丟失「const」嗎?
#include <iostream>
struct Base {
virtual ~Base() = default;
virtual std::string const& get() = 0;
};
struct Derived: Base {
virtual std::string& get() override { return m; }
std::string m;
};
int main()
{
Derived d;
d.get() = "Hello, World";
Base& b = d;
std::cout << b.get() << "\n";
}
是std::string&
協與std::string const&
呢?
是有意義的,因爲如果需要,您可以簡單地重新應用調用方的常量。當然,你不能自動退回,所以相反的情況不會是這樣。 – xaxxon
@xaxxon:是的,我真的很驚訝它的工作原理(從來沒有想過它!)......尤其是因爲CLion不幸在那裏發生了錯誤。爲此,我在跟蹤器上提出了一個錯誤。 –
有趣的是,我發現它在DR1250中也被固定以允許不完整的類型:http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1250 – marcinj