看起來std::pair<int, int>
可以從const std::pair<int, float>&
使用來自here的第4個定義隱式構造。爲什麼std :: pair <int, int>可以從const std :: pair <int, float>&?
#include <iostream>
#include <vector>
#include <utility>
int main() {
std::vector<std::pair<int, float>> v = { {1, 1.5f} };
// The interesting line:
const std::pair<int, int>& x = v[0];
const auto& y = v[0];
std::cout << "before:\n";
std::cout << "\tv[0]: " << std::get<1>(v[0]) << "\n";
std::cout << "\tx: " << std::get<1>(x) << "\n";
std::cout << "\ty: " << std::get<1>(y) << "\n";
std::get<1>(v[0]) = 3.5f;
std::cout << "\nafter:\n";
std::cout << "\tv[0]: " << std::get<1>(v[0]) << "\n";
std::cout << "\tx: " << std::get<1>(x) << "\n";
std::cout << "\ty: " << std::get<1>(y) << "\n";
}
輸出是
before:
v[0]: 1.5
x: 1
y: 1.5
after:
v[0]: 3.5
x: 1
y: 3.5
似乎感到困難x
「感覺」 不太喜歡比y
參考(因爲它是(合法)一個以參考什麼從用戶的角度來看可能是「錯誤」的東西)。
該構造函數不是標記的基本原理是什麼編號explicit
? (我假設有一個重要的使用情況。)
我會注意到未來:std :: tuple有一個類似的構造函數。 –
@Dave:爲什麼'explicit'沒有什麼區別?在我看來,它應該,並且轉換爲臨時綁定到const引用是一個隱式轉換。例如http://ideone.com/k6qd6l –
根據SteveJessop的評論,我沒有標記Dave的答案。 –