gpt4 book ai didi

c++ - 模板的数据类型

转载 作者:太空宇宙 更新时间:2023-11-04 15:06:51 27 4
gpt4 key购买 nike

我有一个名为 Variable 的模板类, 具有专门用于 char* 的构造函数,其定义如下:

template<>
Variable<char*>::Variable(char * const &arg_value)
{
value = new char[strlen(arg_value) + 1];
strncpy(value, arg_value, strlen(arg_value));
value[strlen(arg_value)] = '\0';
}

现在,我有这个声明,它声明了一个 Variable<char*> :

Variable<char*> stringVar = const_cast<char*>("Hi");

在我的 Variable定义,我从来没有为 const char* 声明或定义复制构造函数。但是,该声明工作得很好。为什么是这样?我很肯定 stringVar数据类型为 Variable<char*> ,但这仍然有效。这个任务来自哪里?

最佳答案

接受一个参数的构造函数允许隐式转换。这是您的情况的一个更简单的示例:

struct Foo { Foo(int, double = 0.5, char = 'a') { } };

void bar(Foo);

Foo x = 1; // OK!
bar(2); // also OK

要禁止这种隐式转换,请说explicit:

struct Eew { explicit Eew(int) { } };

// Eew e = 3; // error
Eew e2 = Eew(3); // OK but weird
Eew e3(3); // correct

关于c++ - 模板的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12220332/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com