私は C++11 に非常に慣れていないので、反復子と一様な初期化に問題があり、理解できません。
コンパイルされない次の例を考えてみましょう。
#include <iostream>
#include <vector>
int main() {
std::vector<int> t{1, 2, 3, 4, 5};
auto iter{t.begin()};
for (; iter != t.end(); ++iter) {
std::cout << *iter;
}
return 0;
}
6 行目では、均一な初期化を使用してベクトルが初期化されます。7 行目では、イテレータで同じことをしようとしています。それは動作しません。7 行目を変更してauto iter = t.begin()
も問題ありません。これには単に「範囲ベース」を使用できることはわかっていますが、問題は、イテレータでは一様な初期化が機能しないのに、のような基本型では問題ないのはなぜint i{0};
ですか?