7

プログラム:

#include<vector>

int main() {
    std::vector<int>::size_type size=3;
    std::vector<int> v{size};
}

でコンパイルすると

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

エラーが発生します:

ppp.cpp: In function ‘int main()’:
ppp.cpp:5:28: error: narrowing conversion of ‘size’ from ‘std::vector<int>::size_type {aka long unsigned int}’ to ‘int’ inside { } [-fpermissive]
ppp.cpp:5:28: error: narrowing conversion of ‘size’ from ‘std::vector<int>::size_type {aka long unsigned int}’ to ‘int’ inside { } [-fpermissive]

そしてhttp://www.cplusplus.com/reference/stl/vector/vector/に書かれています

explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );

そのコンストラクターが使用されることを期待していました。

誰か説明できますか?

4

1 に答える 1

19

ベクトルを初期サイズに設定するコンストラクターを呼び出していません。

std::vector<int> v{size};

上記は、値vectorを持つ単一のint要素を含む を作成しますsize。このコンストラクターを呼び出しています:

vector( std::initializer_list<T> init, const Allocator& alloc = Allocator() );

ブレース初期化子リストは として推定され、それ自体にsが含まれstd::initializer_list<size_type>ているため、縮小変換を実行する必要があります。vectorint

ベクトルの初期サイズを設定するには、次を使用します。

std::vector<int> v(size);  // parentheses, not braces

また、vectorリストしたコンストラクターはもう存在しません。C++11 で削除され、次の 2 つのコンストラクターに置き換えられました。

vector( size_type count, const T& value, const Allocator& alloc = Allocator());

explicit vector( size_type count );

cppreference.comは、cplusplus.com よりも優れたリファレンスです。

于 2012-10-03T20:39:01.823 に答える