本文介绍了带有多个参数的显式构造函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使具有多个参数的构造函数explicit有任何(有用的)效果吗?

Does making a constructor having multiple arguments explicit have any (useful) effect?

示例:

class A {
    public:
        explicit A( int b, int c ); // does explicit have any (useful) effect?
};

推荐答案

直到C ++ 11,是的,没有理由在多参数构造函数上使用explicit.

Up until C++11, yeah, no reason to use explicit on a multi-arg constructor.

由于初始化列表,在C ++ 11中发生了变化.基本上,使用初始化器列表进行复制初始化(但不能直接初始化)时,不需要将构造函数标记为explicit.

That changes in C++11, because of initializer lists. Basically, copy-initialization (but not direct initialization) with an initializer list requires that the constructor not be marked explicit.

示例:

struct Foo { Foo(int, int); };
struct Bar { explicit Bar(int, int); };

Foo f1(1, 1); // ok
Foo f2 {1, 1}; // ok
Foo f3 = {1, 1}; // ok

Bar b1(1, 1); // ok
Bar b2 {1, 1}; // ok
Bar b3 = {1, 1}; // NOT OKAY

这篇关于带有多个参数的显式构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-19 01:17