由於char
的隱式轉換,下面的代碼編譯。我不知道爲什麼,因爲我期望(並期望失敗)的唯一隱式轉換是從char const*
到size_t
。C++意外暗示轉換
#include <cstddef>
struct foo
{
int operator[](size_t i) const { return 1; }
operator char() const { return 'a'; }
};
int main()
{
foo f;
f["hello"]; // compilation error desired here
}
這是什麼隱式轉換允許這個編譯?如果我刪除operator char
或使它explicit
然後編譯失敗在所需的位置。
該代碼從中提取的類確實需要隱式轉換和operator[]
。那麼有沒有一種方法可以在不明確轉換的情況下防止行爲?
您是否嘗試過加入一個私有的'operator [](char const *)'? – 2014-09-23 06:15:45