显式构造函数char * vs字符串文字

时间:2019-02-09 23:34:55

标签: c++ explicit

所以我正在更新一些代码以使用显式,并在这种情况下遇到看似不一致的行为:

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。为什么上面的内容不只是创建一个临时文件?

如果这确实是显式的工作方式,那是半无用的,因为如果您想采用该类型的参数,但您要传递明确表示想要的内容,则永远无法使此类基本类显式那堂课要接受,对吧?

0 个答案:

没有答案