を使用しているとき、私は、文字列を埋めるために文字の配列とも初期化リストを使用することができることを知っています。C++文字列 - 奇妙な行動初期化リストコンストラクタ
これは、コンパイラがinitializer_listまたはアロケータにint型からいくつかの暗黙的なプロモーションを行っていることになります。しかし、なぜそれが私に警告を与えてくれないのか、それが暗黙の理由を知らないのか分かりません。
あなたは、文字列のS4、およびS5で何が起こるか私に説明できますか?
#include <iostream>
#include <string>
using namespace std;
class A{
};
int main() {
// string::string(charT const* s)
string s1("12345");
// 5 - because constructor takes into account null-terminated character
cout << s1.size() << endl;
// string(std::initializer_list<charT> ilist)
string s2({'1','2','3','4','5'});
// 5 - because string is built from the contents of the initializer list init.
cout << s2.size()<<endl;
// string::string(charT const* s, size_type count)
string s3("12345",3);
// 3 - Constructs the string with the first count characters of character string pointed to by s
cout << s3.size() << endl;
// basic_string(std::initializer_list<CharT> init,const Allocator& alloc = Allocator()); - ?
string s4({'1','2','3','4','5'},3);
// 2 - why this compiles (with no warning) and what this result means?
cout << s4.size() << endl;
string s5({'1','2','3','4','5'},5);
// 0 - why this compiles (with no warning) and what this result means?
cout << s5.size() << endl;
// basic_string(std::initializer_list<CharT> init,const Allocator& alloc = Allocator());
// doesn't compile, no known conversion for argument 2 from 'A' to 'const std::allocator<char>&'
//string s6({'1','2','3','4','5'},A());
//cout << s6.size() << endl;
return 0;
}
あなたが起こる代わりに何を期待するものを私に説明してもらえますか?私はこのコードで意図しない何かを見ることができません。 – dhein
はい、もちろんです。私は両方のコンストラクタで同じ動作が期待されていますが、文字列とイニシャライザリストも同様です。 – tomekpe