2017-06-06 27 views
10

Theo chuẩn C++ (§30.7.5.2.4 của C++ 17 dự thảo (N4659)), out << ch sẽ không thực hiện một hoạt động mở rộng trên ch, nếu ch là một charout là một std::ostream.C++ Vai trò của std :: ctype <char> :: widen() là gì?

Điều này ngụ ý rằng std::ctype<char>::widen() (ví dụ: char ->char) được đảm bảo theo tiêu chuẩn để trở thành một chức năng nhận dạng (widen(ch) == ch) cho tất cả các nhân vật trong bộ ký tự cơ bản thiết lập?

Nếu vậy, điều này có nghĩa là tất cả các ngôn ngữ được yêu cầu theo tiêu chuẩn để sử dụng cùng một mã hóa không phải (hoặc đa byte) của các ký tự từ bộ ký tự nguồn cơ bản không?

Nếu không, có vẻ như out << 'x', với lựa chọn mã hóa ký tự đặc biệt cho chữ, có thể không hoạt động ở tất cả các ngôn ngữ, ngay cả khi nó hoạt động trong một số ngôn ngữ. Tức là, có thể không có sự lựa chọn mã hóa ký tự bằng chữ, chẳng hạn như out << 'x' đồng thời hoạt động ở tất cả các miền.

Trả lời

1

Không, nó chỉ nói rằng trong trường hợp của

template<class traits> 
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>& out, char c); 

nơi cả hai dòng và << nghề điều hành trong cùng một char loại không có chuyển đổi.

Nếu c có kiểu char và loại đặc trưng của dòng là không char, sau đó seq gồm out.widen(c); nếu không seq bao gồm c.

Trong tất cả các trường hợp khác, ngôn ngữ được sử dụng để tùy ý biến đổi ký tự mà không bị hạn chế về những gì miền địa phương có thể làm.

Các vấn đề liên quan