vector<T>
は、ベクトルの大きさを取るコンストラクタを持っており、私の知る限りでは、それは私がすることはできませんintからvectorへの暗黙的な変換?
void f(std::vector<int> v);
int main()
{
f(5);
}
をコンパイルするには、次のコードが失敗したという事実によって証明することができ明示、あります理解し、説明するために、あなたを求めていますが、次のコードは、
std::vector<std::vector<int>> graph(5, 5);
ないだけをコンパイルし、なぜそれがコンパイルんですが、それは実際には5にグラフのサイズを変更し、5ゼロのベクトルに各要素を設定し、つまりは同じように同じことを行いますコード私は通常書く:
std::vector<std::vector<int>> graph(5, std::vector<int>(5));
どのようにですか?どうして?
コンパイラ:MSVC10.0
OKは、それがMSVCのバグ(さらに別の1)だそうです。誰かが回答のバグについて詳しく説明できる場合(つまり、再現するケースを要約すると)、私は喜んでそれを受け入れるでしょう。
これは(正しく)GCC 4.7ではコンパイルされません。さらに別のMSVC++標準外の奇妙さ。彼らはたぶん、明示的にコンストラクタをマークすることを忘れてしまったので、それを調べるために ''を調べることができます。 –
syam
@syam:GCCでコンパイルできないのはうれしいですが、実際には奇妙なのは、最初の例がMSCVでコンパイルされているのに対し、もう1つはコンパイルされていないということです。それは本当に奇妙なものです –
@ArmenTsirunyan VS2012でコンパイルしません。エラーメッセージは、コンストラクタが「明示的」であることを示します – Praetorian