Tôi biết rằng tôi có thể sử dụng mảng ký tự và cũng có danh sách khởi tạo để lấp đầy chuỗi.Chuỗi C++ - hành vi lạ khi sử dụng hàm tạo danh sách khởi tạo
Dường như trình biên dịch tạo ra một số quảng cáo ngầm từ int đến initializer_list hoặc cấp phát. Nhưng tôi không biết tại sao nó không cho tôi bất kỳ cảnh báo nào và tại sao nó lại làm cho nó ngầm.
Bạn có thể giải thích cho tôi điều gì xảy ra với chuỗi s4 và s5 không?
#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;
}
Bạn có thể giải thích cho tôi những gì bạn mong đợi thay vì điều gì sẽ xảy ra? Tôi không thể thấy bất cứ điều gì không chủ ý trong đoạn mã này. – dhein
Vâng, tất nhiên. Tôi đã mong đợi các hành vi tương tự cho cả hai nhà xây dựng, một trong những lấy mảng của chars và initializer danh sách là tốt. – tomekpe