দেওয়া .NET সি ++ এর চেয়েও নতুন, কিছু আমাকে জানিয়েছে যে অ্যারে সূচক বা দৈর্ঘ্যের মতো নেতিবাচক হতে পারে এমন জিনিসগুলির জন্য এমনকি স্বাক্ষরযুক্ত ইন্ট ব্যবহার করতে সমস্যা হতে পারে।
হ্যাঁ. কিছু ধরণের অ্যাপ্লিকেশন যেমন ইমেজ প্রসেসিং বা অ্যারে প্রসেসিংয়ের জন্য, প্রায়শই বর্তমান অবস্থানের সাথে সম্পর্কিত উপাদানগুলিতে অ্যাক্সেস করা প্রয়োজন:
sum = data[k - 2] + data[k - 1] + data[k] + data[k + 1] + ...
এই ধরণের অ্যাপ্লিকেশনগুলিতে, আপনি সতর্কতার সাথে চিন্তা না করে স্বাক্ষরযুক্ত পূর্ণসংখ্যার সাথে পরিসীমা চেক করতে পারবেন না:
if (k - 2 < 0) {
throw std::out_of_range("will never be thrown");
}
if (k < 2) {
throw std::out_of_range("will be thrown");
}
if (k < 2uL) {
throw std::out_of_range("will be thrown, without signedness ambiguity");
}
পরিবর্তে আপনি আপনার পরিসীমা চেক এক্সপ্রেশন পুনরায় সাজানো আছে । এটিই মূল পার্থক্য। প্রোগ্রামারদের অবশ্যই পূর্ণসংখ্যার রূপান্তর নিয়মগুলি মনে রাখতে হবে। কোন সন্দেহ থাকলে, পুনরায় পড়া http://en.cppreference.com/w/cpp/language/operator_arithmetic#Conversions
প্রচুর অ্যাপ্লিকেশনগুলিকে খুব বড় অ্যারে সূচকগুলি ব্যবহার করার প্রয়োজন হয় না তবে তাদের পরিসীমা পরীক্ষা করা দরকার। তদ্ব্যতীত, প্রচুর প্রোগ্রামার এই এক্সপ্রেশন পুনর্বিন্যাস জিমন্যাস্টিকগুলি করতে প্রশিক্ষিত হয় না। একটি একক মিস সুযোগ একটি শোষণের দ্বার উন্মুক্ত করে।
সি # প্রকৃতপক্ষে সেই অ্যাপ্লিকেশনগুলির জন্য ডিজাইন করা হয়েছে যা অ্যারে প্রতি 2 ^ 31 উপাদানগুলির বেশি প্রয়োজন হবে না। উদাহরণস্বরূপ, একটি স্প্রেডশীট অ্যাপ্লিকেশনটির সেই অনেকগুলি সারি, কলাম বা কক্ষগুলি মোকাবেলা করার দরকার নেই। সি # limit চ্ছিক পরীক্ষিত গাণিতিক থাকার ফলে উপরের সীমাটির সাথে ডিল করে যা সংকলক বিকল্পগুলির সাথে বিশৃঙ্খলা ছাড়াই কোনও কীওয়ার্ড সহ কোডের ব্লকের জন্য সক্ষম করা যায়। এই কারণে, সি # স্বাক্ষরিত পূর্ণসংখ্যার ব্যবহারের পক্ষে। যখন এই সিদ্ধান্তগুলি পুরোপুরি বিবেচনা করা হয়, তখন তা বোঝা যায়।
সি ++ কেবল আলাদা, এবং সঠিক কোড পাওয়া শক্ত er
"স্বল্প বিস্ময়ের নীতি" এর সম্ভাব্য লঙ্ঘন অপসারণ করার জন্য স্বাক্ষরিত গাণিতিককে অনুমতি দেওয়ার ব্যবহারিক গুরুত্ব সম্পর্কে, পয়েন্টের একটি ক্ষেত্রে ওপেনসিভি, যা ম্যাট্রিক্স উপাদান সূচক, অ্যারের আকার, পিক্সেল চ্যানেল গণনা ইত্যাদির জন্য স্বাক্ষরিত 32-বিট পূর্ণসংখ্যার ব্যবহার করে Image প্রসেসিং প্রোগ্রামিং ডোমেনের একটি উদাহরণ যা আপেক্ষিক অ্যারে সূচককে ভারী ব্যবহার করে। স্বাক্ষরবিহীন পূর্ণসংখ্যার আন্ডারফ্লো (চারপাশে মোড়ানো নেতিবাচক ফলাফল) অ্যালগরিদম বাস্তবায়নকে মারাত্মকভাবে জটিল করে তুলবে।
-1
"পাওয়া যায়নি" বা "সীমার বাইরে" ইঙ্গিত করতে কোনও সূচক ফেরত ফাংশন থেকে ফিরে আসে। এটিCompare()
ফাংশন (বাস্তবায়নIComparable
) থেকেও ফিরে এসেছে । একটি 32 বিট ইনট একটি সাধারণ সংখ্যার জন্য টাইপ করতে যাওয়া হিসাবে বিবেচিত হয়, আমি আশা করি যে কারণে স্পষ্ট কারণ রয়েছে।