【发布时间】:2014-09-23 05:53:38
【问题描述】:
以下代码由于char 的隐式转换而编译。我不确定为什么,因为我期望(并且期望失败)的唯一隐式转换是从 char const* 到 size_t。
#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*)?