Я пишу 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 is ISBN. , а четвертый читается ISBN от stdin
Я знаю, что без явного подтверждения следующие утверждения являются законными.
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/
я не могу получить точку, почему некоторые из конструкторов вектора объявлены явно ?? Какова причина?
Em, потому что действительно странно, что когда вы говорите 'do_something (5)' они означают передачу вектора с 5 элементами? – kennytm
Ни одно из ваших «юридических» утверждений не является законным, потому что вы не можете привязать временную к неконстантной 'Sales_data 'reference в' comb() '. – chris
@chris Они оба выглядят законными для меня ... первый передает временный const-ref, а второй pa ss - не временный (cin) по ссылке. – maditya