c++隐式转换:为什么字面字符串要转换为字符串

C++ implicit conversion: Why should literal string convert to string?

本文关键字:转换 字符串 为什么 c++      更新时间:2023-10-16

示例来自C++ Primer 5th的第7章。

假设类Sales_data有这样的构造函数:

Sales_data(const std::string &s): bookNo(s) { }

它有一个公共函数成员:

Sales_data &combine(Sales_data &s){...}

flow is error:(item是一个Sales_data实例)

item.combine("9-999-9999");

原因是:只允许一个类类型转换,然而,上面提到的代码有两个用户定义的转换。

  • "9-999-9999"到string
  • stringSales_data

为什么要将字符串转换为字符串?9-999-9999不是string吗?

"9-999-9999"不是字符串,它是const char[]。您可以通过在类中添加一个构造函数来解决这个问题,该构造函数采用const char *,例如:

Sales_data(const char* s): bookNo(s) { };

如果你有c++ 14的支持,你也可以使用std::string_literal:

item.combine("9-999-9999"s);