ত্রিগ্রাফগুলি বাদ পড়েছে
উত্স ফাইল এনকোড করা হয় শারীরিক অক্ষর সেট যে একটি বাস্তবায়ন-সংজ্ঞায়িত ভাবে ম্যাপ করা হয় উৎস অক্ষর সেট , যা মান সংজ্ঞায়িত করা হয়। উত্স অক্ষর সেট দ্বারা স্থানীয় বিরামচিহ্নগুলির যে সমস্ত বিরামচিহ্নগুলি স্থানীয়ভাবে তৈরি হয়নি এমন কিছু শারীরিক অক্ষর সেটগুলি থেকে ম্যাপিংগুলিকে সামঞ্জস্য করতে, ভাষা সংজ্ঞায়িত ট্রিগ্রাফ three তিনটি সাধারণ অক্ষরের ক্রম যা কম সাধারণ বিরামচিহ্নের অক্ষরের জায়গায় ব্যবহার করা যেতে পারে। এগুলি হ্যান্ডেল করার জন্য প্রিপ্রসেসর এবং সংকলকটির প্রয়োজন ছিল।
সি ++ 17-এ, ট্রিগ্রাফগুলি সরানো হয়েছে। সুতরাং কিছু উত্স ফাইল নতুন সংকলকগণ গ্রহণ করবে না যদি না সেগুলি শারীরিক চরিত্র থেকে অন্য কোনও শারীরিক চরিত্র সেটকে প্রথমে অনুবাদ করা হয় যা উত্স অক্ষর সেটটিতে একের পর এক মানচিত্র করে। (বাস্তবে, বেশিরভাগ সংকলকগণ কেবলমাত্র ট্রাইগ্রাফগুলির ব্যাখ্যা alচ্ছিকভাবে করেছেন)) এটি একটি সূক্ষ্ম আচরণ পরিবর্তন নয়, তবে একটি ব্রেকিং পরিবর্তন পূর্ববর্তী-গ্রহণযোগ্য উত্স ফাইলগুলিকে কোনও বাহ্যিক অনুবাদ প্রক্রিয়া ছাড়াই সংকলিত হতে বাধা দেয়।
আরও বাধা আছে char
স্ট্যান্ডার্ডটি এক্সিকিউশন ক্যারেক্টার সেটকেও বোঝায় , যা বাস্তবায়ন সংজ্ঞায়িত হয় তবে এতে কমপক্ষে সম্পূর্ণ উত্স অক্ষর সেট প্লাস অল্প সংখ্যক নিয়ন্ত্রণ কোড থাকা আবশ্যক।
সি ++ স্ট্যান্ডার্ডটি charসম্ভবত-স্বাক্ষরিত ইন্টিগ্রাল টাইপ হিসাবে নির্ধারিত হয়েছে যা কার্যকরভাবে অক্ষর সংকলনের প্রতিটি মানকে দক্ষতার সাথে উপস্থাপন করতে পারে। কোনও ভাষা আইনজীবীর উপস্থাপনের সাথে আপনি যুক্তি দিতে পারেন যে charকমপক্ষে 8 টি বিট থাকতে হবে।
যদি আপনার প্রয়োগটি এর জন্য স্বাক্ষরবিহীন মান ব্যবহার করে charতবে আপনি জানেন যে এটি 0 থেকে 255 অবধি হতে পারে এবং এটি প্রতিটি সম্ভাব্য বাইট মান সংরক্ষণের জন্য উপযুক্ত।
তবে যদি আপনার প্রয়োগটি একটি স্বাক্ষরিত মান ব্যবহার করে তবে এর বিকল্প রয়েছে।
বেশিরভাগ দু'টির পরিপূরক ব্যবহার করবে, charসর্বনিম্ন -128 থেকে 127 অবধি প্রদান করবে That's এটি 256 অনন্য মান।
তবে অন্য বিকল্পটি ছিল চিহ্ন + মাত্রা, যেখানে একটি বিটটি নম্বরটি নেতিবাচক কিনা তা চিহ্নিত করার জন্য সংরক্ষিত এবং অন্য সাতটি বিট প্রস্থকে নির্দেশ করে। এটি char-127 থেকে 127 এর পরিসীমা দেয় যা কেবল 255 অনন্য মান values (কারণ আপনি -0 উপস্থাপনের জন্য একটি দরকারী বিট সংমিশ্রণ হারাবেন))
আমি নিশ্চিত নই যে কমিটি স্পষ্টতই এটিকে একটি ত্রুটি হিসাবে মনোনীত করেছে, তবে এটি কারণ আপনি মানটি উপর নির্ভর করতে পারেন নি যে আপনি কোনও গোল গোল-ট্রিপ গ্যারান্টি unsigned charদিতে charএবং পিছনে আসল মানটি সংরক্ষণ করতে পারবেন। (বাস্তবে, সমস্ত বাস্তবায়ন হয়েছিল কারণ তারা স্বাক্ষরিত ইন্টিগ্রাল ধরণের জন্য দু'জনের পরিপূরক ব্যবহার করেছিল))
রাউন্ড-ট্রিপিং নিশ্চিত করার জন্য কেবল সম্প্রতি (সি ++ 17?) শব্দটি স্থির করা হয়েছিল। এই সংশোধন, এর সাথে অন্যান্য সমস্ত প্রয়োজনীয়তার সাথে charকার্যকরভাবে এতক্ষণে charস্পষ্টভাবে কিছু না বলেই স্বাক্ষরিত হওয়ার জন্য দুটিটির পরিপূরককে নির্দেশ দেয় (এমনকী স্ট্যান্ডার্ডটি অন্যান্য স্বাক্ষরিত ইন্টিগ্রাল ধরণের ক্ষেত্রে সাইন + প্রস্থের প্রতিনিধিত্বের অনুমতি দেয়)) সমস্ত স্বাক্ষরিত অবিচ্ছেদ্য ধরণের দুটির পরিপূরক ব্যবহার করার জন্য একটি প্রস্তাব রয়েছে, তবে এটি এটিকে C ++ 20 এ পরিণত করেছে কিনা তা আমি মনে করি না।
সুতরাং এটি একটি যা আপনি সন্ধান করছেন তার বিপরীতে সাজান কারণ এটি পূর্বে ভুলটিকে অত্যধিক মর্যাদাবান কোডকে একটি পূর্ববর্তী সমাধান দেয়।