所以我正在更新一些代码以使用显式,并在这种情况下遇到看似不一致的行为:
explicit Whatever(const wchar_t* const pszVal)
这不适用于类型为const wchar_t [x]的文字字符串,并且明确禁止在上述构造方法中接受它。它抱怨
const wchar_t [x]无法转换为const wchar_t * const
。
但是,如果我为阵列场景添加一个:
explicit Whatever(const wchar_t pszVal[])
然后它声明此构造函数已存在,并且它是上面的构造函数,不接受数组形式。因此,这似乎是一个catch 22,它将阻止我为文字字符串使用显式构造函数。
这是Visual C ++2017。我在这里缺少什么吗?我很乐意提供额外的构造函数,但它的行为似乎不一致。
好的,只是为了跟进,因为在注释中很难做到这一点,所以场景是这样的:
class AString { Whatever(const wchar_t* const val) {} } ;
class Something { Something(const AString& val) {} };
创建传递文字的东西失败,因为它不会将L“ X”转换为AString:
Something MySomething(L"X");
显然,这与我的想法有所不同,但对我而言却是出乎意料的。 AString有一个有效的构造函数来接受wchar_t。为什么上面的内容不只是创建一个临时文件?
如果这确实是显式的工作方式,那是半无用的,因为如果您想采用该类型的参数,但您要传递明确表示想要的内容,则永远无法使此类基本类显式那堂课要接受,对吧?