std::vector<char> p = {"abc", "def"};
"abc"
および"def"
はchar
ではありません。なぜコンパイラはこの型の不一致に関するエラーを出さないのですか?
initializer_list<char>
を取るvector
のコンストラクターを呼び出していません。あなたが言ったように、あなたはchar
sのリストを渡していないので、そのコンストラクタは実行可能ではありません。
ただし、vector
には constructor もあり、要素の範囲への反復子を取ります。
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
残念ながら、2つの引数はそれぞれ暗黙的にchar const *
に変換されるため、このコンストラクターは一致します。ただし、コンストラクタに渡される開始イテレータと終了イテレータが有効な範囲ではないため、コードの動作は未定義です。