1

我的程序中有一个奇怪的行为。我写了一个总是失败的测试。在调试时,我看到了一些我不明白的东西:

我有一些多个构造函数,但是如果我通过 _T() 传递 unicode,总是会调用这个构造函数:

IsNullable(bool isNullable)
    : m_bIsNullabe(isNullable), Flag(eNullAllowed)
{};

这是我调用构造函数的方式:

... = new IsNullable(_T("N"));

奇怪的是,上面的 bool Constructor 总是被调用......
为什么会这样?如果有人知道,我会很高兴的!

贪婪,克莱门斯

编辑:

这个构造函数应该被调用:

IsNullable(wchar_t isNullable)
    : Flag(eNullAllowed)
{...};
4

2 回答 2

4

您要调用的构造函数采用wchar_t字符,而不是指向宽字符串的指针。称它为:

IsNullable( L'N' );

请注意,我没有使用_T宏,因为您的构造函数参数类型是wchar_t并且它不取决于UNICODE符号是否已定义。所以在这种情况下不需要那个宏。

调用另一个构造函数的原因是字符串字面量,类型const wchar_t[2](假设_T宏扩展为L"N")衰减为 a const wchar_t *,然后隐式转换为 a bool

于 2012-12-11T15:22:06.117 回答
1

_T("N")不是 a wchar_t,而是一个宽字符串文字,实际上是一个指针。没有从它到 awchar_t的转换,但是有一个到 的转换bool。也许你的意思是

new IsNullable(_T('N'))
于 2012-12-11T15:22:17.283 回答