gpt4 book ai didi

c++ - 关于 C++ 类中的转换

转载 作者:行者123 更新时间:2023-11-30 02:55:58 25 4
gpt4 key购买 nike

我已经写了几年c,只是因为一些需要而进入c++!我的书是 C++ Primer 5/e,我已经谈到了关于构造函数转换的主题并遇到了一些问题

在 C++ 中,我们有很多种类型转换。像 static_cast、dynamic_cast,我们还有类似函数的转换,这是一种显式转换。

class Sales_data{
public:
//C++11 feature,ask compiler to create a default constructor for us
Sales_data() = default;
Sales_data(const std::string &s, unsigned n, double p):
bookNo(s), units_sold(n), revenue(p*n);
explicit Sales_data(const std::string &s): bookNo(s){}
explicit Sales_data(std::istream&);

Sales_data combine(const Sales_data &item);
private:
std::string bookNo; // implicitly initialized to the empty string
unsigned units_sold;
double revenue;
};

std::string s 是一个 ISBN。第四个从 stdin 读取 ISBN

我知道没有明确的,以下声明是合法的。

item.combine(string("ISBN NUMBER"));
item.combine(cin);

//error: need two conversion const char *->temporary string-> temporary Sales_item
item.combine("ISBN NUMBER");

我只是不明白将最后两个构造函数显式化有什么好处?

http://www.cplusplus.com/reference/vector/vector/vector/

我不明白为什么某些 vector 的构造函数被显式声明?这是什么原因?

最佳答案

explicit禁止调用构造函数进行自动转换。构造函数仍然可以用作普通构造函数。是的,语言应该被设计成有 explicit默认情况下构造函数并注释(implicit?)转换构造函数......但事情就是这样。

std::vector<T>::vector(int)的原因被标记为明确的,例如是禁止以下代码:

void do_fancy_stuff(const std::vector<std::string> &data);

do_fancy_stuff(20);

如果 vector 构造函数不是显式的,它将用于转换 intvector 20 个空字符串,这毫无意义。

编写构造函数时的总体思路TypeA::TypeA(TypeB x)想知道:“这个构造函数是将 TypeB 转换TypeA 还是仅使用 x 作为单个参数?如果是后者,请添加 explicit

关于c++ - 关于 C++ 类中的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15996589/

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