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

时间:2008-10-06 13:46:42

标签: c++

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

我更喜欢将“explicit”作为默认值,这样编译器就无法静默使用这些构造函数进行转换。

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

7 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:1)

对于你拥有的任何标题,这可能是相当讨厌的。与<vector>或任何Boost标头一样。它也会导致很多错误的错误报道。所以,不,我不希望编译器添加这样的#pragma。

答案 2 :(得分:1)

据我所知,编译器中没有这样的选项。但是对这种情况有一个Lint警告(见http://www.gimpel.com/lintinfo.htm)。

答案 3 :(得分:1)

如果有一个pragma或命令行选项默认情况下使构造函数显式,那么如何声明一个不显式的?必须有另一个特定于编译器的标记或编译指示才能声明一个隐式转换构造函数。

答案 4 :(得分:0)

我认为答案是否定的!

对不起,这不是一个非常有建设性的答案。我希望别人可能知道更多!

答案 5 :(得分:0)

标准c ++中没有这样的选项,我也不相信Visual Studio中有这样的选项。

答案 6 :(得分:-1)

我可以看到问题是10岁以上。现在,您只需在声明之前插入$response = (new Api())->post('index.php/',[ 'email'=> 'admin@admin.com', 'password' => '123456' ]); 关键字即可。