c++ 对于算术类型为0,则为默认构造函数,否则为

mwkjh3gx  于 2023-04-01  发布在  其他
关注(0)|答案(2)|浏览(84)

我可以用C++说吗?
0表示算术类型,默认为CTOR,否则为
例如,假设我正在定义一个类似vector的类,但与vector不同的是,当元素类型是算术类型时,我希望初始值为0,我该怎么做呢?

template<typename T>
struct my_vector {
    my_vector(size_t size, const T& initial_element = ???

我不能在这里写0,因为这样做对那些具有不能从0构造的默认构造函数的类型无效。

m1m5dgzv

m1m5dgzv1#

你正在寻找的是value initialization,它的形式是T()T{}。对于内置类型,你得到零初始化,类类型得到默认初始化。

icomxhvb

icomxhvb2#

我怎么能这么做?
您可以通过使用T()替换???来实现此目的,如下所示:

template<typename T>
struct my_vector {
//----------------------------------------------------vvv------> for default ctor and 0 for arithmetic types types
    my_vector(size_t size, const T& initial_element = T())
   {
   }
};

Working demo
这将使用值初始化并按照您的要求工作。

相关问题