考虑以下类:
class Test
{
public:
Test( char );
Test( int );
operator const char*();
int operator[]( unsigned int );
};
当我使用它时:
Test t;
Test& t2 = t[0];
我收到一个编译器错误,它无法确定要使用哪个 operator[]。MSVC 和 Gcc 都有。不同的错误。但同样的问题。
我知道发生了什么。它可以从 int 或 char 构造 Test ,它可以使用Test::operator[]
也可以转换为 const char* 并使用内置的char*[]
.
我希望它更喜欢Test::operator[]
。
有没有办法指定这样的偏好?
更新:首先,我同意下面的回复,即没有语言功能可以让您指定转换的优先级。但就像下面发现的 juanchopanza - 您可以通过使一个转换不需要强制转换来间接创建这样的偏好,而使另一个转换需要强制转换。例如unsigned int
,作为operator[]
不会起作用的论点,但是,使用int
意志。
默认索引参数是无符号的 - 无论如何对于 gcc 和 msvc - 因此使索引参数无符号将导致编译器更喜欢正确的运算符。
@Konrad:关于到内置类型的隐式转换。大体同意。但在这种情况下我需要它。