我可以用C++说吗?0表示算术类型,默认为CTOR,否则为例如,假设我正在定义一个类似vector的类,但与vector不同的是,当元素类型是算术类型时,我希望初始值为0,我该怎么做呢?
vector
0
template<typename T> struct my_vector { my_vector(size_t size, const T& initial_element = ???
我不能在这里写0,因为这样做对那些具有不能从0构造的默认构造函数的类型无效。
m1m5dgzv1#
你正在寻找的是value initialization,它的形式是T()或T{}。对于内置类型,你得到零初始化,类类型得到默认初始化。
T()
T{}
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这将使用值初始化并按照您的要求工作。
2条答案
按热度按时间m1m5dgzv1#
你正在寻找的是value initialization,它的形式是
T()
或T{}
。对于内置类型,你得到零初始化,类类型得到默认初始化。icomxhvb2#
我怎么能这么做?
您可以通过使用
T()
替换???
来实现此目的,如下所示:Working demo
这将使用值初始化并按照您的要求工作。