强制单参数构造函数在C++中是显式的吗?

Rog*_*mbe 24 c++

默认情况下,在C++中,单参数构造函数可用作隐式转换运算符.这可以通过将构造函数标记为显式来抑制.

我宁愿将"explicit"作为默认值,这样编译器就无法静默使用这些构造函数进行转换.

有没有办法在标准C++中执行此操作?如果失败了,是否有一个pragma(或类似的)在Microsoft C++中可以用来做到这一点?那么g ++(我们不使用它,但它可能是有用的信息)?

Mat*_*ice 19

不,你必须亲手完成.这是一种痛苦,但你当然应该养成使单个参数构造函数明确的习惯.我无法想象如果找到解决方案然后必须将代码移植到另一个平台,您会遇到的痛苦.你应该回避这样的编译器扩展,因为它会使代码不那么便携.

  • 老实说,我们并不太关心可移植性;我们只是在意它的可移植性。我们是一家 Windows 商店。这并不意味着我们不在乎;而是意味着我们不在乎。这意味着,一旦您选择了 Win32 GUI 框架,支持 Linux 或 OSX 就只是学术问题了。 (2认同)
  • 可移植性不仅仅是一个平台问题。还有其他适用于 Windows 的编译器,例如。英特尔、MinGW。新版本的微软编译器还具有向后兼容性。您拥有的唯一保证是 C++ 委员会在破坏现有 C++ 代码之前会非常仔细地考虑。 (2认同)
  • 我已经成为编写可移植代码的坚定支持者。我们几乎总是发现,运行代码的编译器越多,代码就越好。因此,我形成了一种可移植的思维方式,在从事单编译器项目时仍然坚持这种思维方式。 (2认同)