2014-12-22 13 views
18

C++ 1z sẽ xóa các dấu vết. IBM phản đối rất nhiều điều này (herehere) vì vậy dường như có các đối số cho cả hai bên loại bỏ/không loại bỏ.C++ 1z tại sao không loại bỏ các hình vẽ cùng với các dấu phẩy?

Nhưng kể từ khi quyết định được thực hiện để loại bỏ các dấu phẩy, tại sao lại để lại đồ họa? Tôi không thấy bất kỳ lý do gì để giữ đồ họa ngoài những lý do để giữ cho các dấu vết (mà dường như không đủ trọng lượng để giữ chúng).

+13

Đó là gần Giáng sinh, vì vậy việc không cho phép mặt cười có râu sẽ rất buồn. – rightfold

+1

Lưu ý rằng các dấu phẩy đang được _deprecated_ và không _removed_. Tôi nghĩ rằng ý tưởng là để có được những người có thể sử dụng chúng để ngừng sử dụng chúng trong mã mới và để có được các nhà phát triển với mã cũ để di chuyển cuối cùng. Họ sẽ không phá vỡ mã - vì lý do tại sao: nó chỉ là một cách khác để làm điều tương tự mà làm cho ngôn ngữ chỉ là một chút lớn hơn và khó hiểu hơn. –

+0

@BenjaminGruenbaum Theo như tôi biết, chúng sẽ biến mất hoàn toàn trong C++ 17 – Xeo

Trả lời

27

Trigraphs có nhiều vấn đề đối với người dùng không biết hơn so với các hình vẽ. Điều này là do chúng được thay thế trong các chuỗi ký tự và nhận xét. Dưới đây là một số ví dụ ...

Ví dụ A:

std::string example = "What??!??!"; 
std::cout << example << std::endl; 

What|| sẽ được in ra cửa sổ Console. Điều này là do các dấu phẩy ??! được dịch sang |.

Ví dụ B:

// Error ?!?!?!??!??/ 
std::cout << "There was an error!" << std::end; 

Không có gì sẽ xảy ra ở tất cả. Điều này là do ??/ chuyển thành \, thoát khỏi ký tự dòng mới và kết quả trong dòng tiếp theo được nhận xét.

Ví dụ C:

// This makes no sense ?!?!!?!??!??/ 
std::string example = "Hello World"; 
std::cout << example << std::endl; 

này sẽ đưa ra một lỗi dọc theo dòng của use of undeclared identifier "example" vì những lý do tương tự như ví dụ B.

Có những vấn đề xa phức tạp hơn trigraphs có thể gây ra quá, nhưng bạn có được ý tưởng. Cần lưu ý rằng nhiều trình biên dịch thực sự phát ra một cảnh báo khi các bản dịch đó đang được thực hiện; một lý do khác để luôn coi cảnh báo là lỗi. Tuy nhiên điều này không được yêu cầu bởi tiêu chuẩn và do đó không thể dựa vào.

Đồ họa ít vấn đề hơn so với dấu vết, vì chúng không được thay thế bên trong mã thông báo khác (ví dụ: chuỗi hoặc ký tự) và không có chuỗi chuyển thành \, vì vậy không thể xuất hiện dòng mới trong nhận xét.

Kết luận

Ngoài khó khăn hơn để đọc mã, có những vấn đề ít gây ra bởi chữ ghép và do đó cần phải loại bỏ chúng sẽ giảm đáng kể.

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