我有一個類,它看起來是這樣的:麻煩與常量/非const重載
class ClassA
{
public:
float Get(int num) const;
protected:
float& Get(int num);
}
類之外,我調用get()函數。
float foo = classAInstance.Get(i);
我希望這個叫公版,而是Visual Studio中出現了錯誤:
error C2248: 'ClassA::Get' : cannot access protected member declared in class 'ClassA'
當註釋掉保護過載和刪除所有引用的代碼編譯。
爲什麼編譯器會在可訪問的成員可用時嘗試使用不可訪問的成員?有沒有一種可以接受的方式來強制編譯器選擇正確的重載?是否有對成員函數解析規則的引用?
這個例子看起來很危險。給定'string func();'和'Blah b(func())'的表達式將會被編譯,並且仍然會導致一個懸掛引用。我的規則是:*從不*保留'const&'參數。你說什麼? – 2014-03-07 08:01:05
@MartinBa:當然你也希望'Blah(string &&)= delete;' – 2014-03-07 14:08:27
嗯。然後問題就變成了是否仍然需要'const char'overload。 'char *'參數會綁定到'string const&'版本還是'string &&'版本? :-) – 2014-03-07 14:18:36