我已經寫了幾年C,只是爲了一些需要進入C++!我的書是C++ Primer 5/e,並且我已經涉及構造函數轉換的主題並且遇到了一些問題關於在C++中的類鑄造
在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。 和第四個從標準輸入讀取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/
我不能點,爲什麼有些矢量的構造函數的聲明明確?是什麼原因?
Em因爲真的很奇怪,當有人說「do_something(5)」意味着要傳遞一個包含5個元素的向量嗎? – kennytm
您的「合法」語句都不合法,因爲您無法將臨時變量綁定到非常量的Sales_data ''在'combine()'中的引用。 – chris
@chris它們對我來說都是合法的......第一個將一個臨時對象傳遞給const-ref,第二個對象通過引用指出非臨時(cin)。 – maditya