হিসাবে C++11
, পাওয়ার ফাংশনগুলির স্যুটটিতে (এবং অন্যদের) বিশেষ কেস যুক্ত করা হয়েছিল। C++11 [c.math] /11
সমস্ত float/double/long double
ওভারলোডগুলি তালিকাভুক্ত করার পরে (আমার জোর এবং প্যারাফ্রেসড) বলেছেন:
তদ্ব্যতীত, এটি নিশ্চিত করার জন্য পর্যাপ্ত অতিরিক্ত ওভারলোড থাকতে হবে, যদি কোনও double
প্যারামিটারের সাথে সম্পর্কিত কোনও যুক্তি টাইপ double
বা একটি পূর্ণসংখ্যার টাইপ থাকে, তবে double
পরামিতিগুলির সাথে সম্পর্কিত সমস্ত যুক্তি কার্যকরভাবে কাস্ট করা হয় double
।
সুতরাং, মূলত, সংখ্যার পরামিতিগুলি অপারেশন সম্পাদন করতে ডাবলগুলিতে আপগ্রেড করা হবে।
এর আগে C++11
(যা আপনার প্রশ্ন জিজ্ঞাসা করা হয়েছিল) আগে কোনও পূর্ণসংখ্যার ওভারলোডের অস্তিত্ব ছিল না।
যেহেতু আমি তন্ন তন্ন ঘনিষ্ঠভাবে এর নির্মাতাদের সঙ্গে যুক্ত ছিল C
না C++
তাদের সৃষ্টি দিনের মধ্যে (যদিও আমি নই বরং পুরানো), বা ANSI / আইএসও কমিটি যে মান নির্মিত অংশ, এই অগত্যা আমার পক্ষ থেকে মতামত। আমি এটা ভাবতে চাই অবহিত মতামত তবে আমার স্ত্রী যেমনটি আপনাকে বলবেন (ঘন ঘন এবং খুব বেশি উত্সাহের প্রয়োজন নেই), আমি আগে ভুল করেছি :-)
অনুমান, এটি মূল্যবান জন্য নিম্নলিখিত।
আমি সন্দেহ করি যে কারণটি প্রাক-এএনএসআইC
এই বৈশিষ্ট্যটি ছিল না কারণ এটি সম্পূর্ণ অপ্রয়োজনীয় ছিল। প্রথমত, পূর্ণসংখ্যার শক্তিগুলি করার আগে থেকেই পুরোপুরি ভাল উপায় ছিল (দ্বিগুণ সহ এবং পরে কেবল পূর্ণসংখ্যায় ফিরে রূপান্তরিত করা, রূপান্তর করার আগে পূর্ণসংখ্যার ওভারফ্লো এবং ডুবো প্রবাহের জন্য পরীক্ষা করা)।
দ্বিতীয়ত, আপনাকে আর একটি জিনিস মনে রাখতে হবে C
এটির মূল উদ্দেশ্যটি ছিল একটি সিস্টেম হিসাবে প্রোগ্রামিং ভাষা, এবং এটি প্রশ্নবিদ্ধ যে ভাসমান বিন্দু আদৌ সেই অঙ্গনে কাম্য কিনা।
যেহেতু এর প্রাথমিক ব্যবহারের একটি ক্ষেত্রে ইউনিক্সের কোড আপ করা ছিল তাই ভাসমান বিন্দুটি অকেজো হওয়ার পাশে থাকত। বিসিপিএল, যার ভিত্তিতে সি ভিত্তিক ছিল, তার পাওয়ারেরও কোনও ব্যবহার ছিল না (স্মৃতি থেকে এটি কোনও ভাসমান পয়েন্ট ছিল না)।
অন্যদিকে, একটি অবিচ্ছেদ্য শক্তি অপারেটর সম্ভবত একটি গ্রন্থাগার কলের চেয়ে বাইনারি অপারেটর হত। আপনি লাইব্রেরির পরিবর্তে ভাষার যথাযথ অংশ সহ x = add (y, z)
তবে দুটি সংখ্যক যোগ করতে পারবেন না ।x = y + z
তৃতীয়ত, যেহেতু অবিচ্ছেদ্য শক্তির প্রয়োগ অপেক্ষাকৃত তুচ্ছ, এটি প্রায় নিশ্চিত যে ভাষার বিকাশকারীরা তাদের সময়কে আরও কার্যকর জিনিস সরবরাহ করার জন্য আরও ভালভাবে ব্যবহার করবেন (সুযোগ ব্যয়ের বিষয়ে নীচের মন্তব্য দেখুন)।
এটি আসলটির জন্যও প্রাসঙ্গিক C++
। যেহেতু মূল প্রয়োগটি কার্যকরভাবে একটি অনুবাদক যা C
কোড তৈরি করেছিল , এটি এর অনেকগুলি বৈশিষ্ট্যকে বহন করে C
। এর আসল উদ্দেশ্যটি ছিল সি-উইথ-ক্লাস, সি-সহ-ক্লাস-প্লাস-অল্প-বিট-অফ-অতিরিক্ত-গণিত-স্টাফ নয়।
এটি আগে কখনও কেন মানগুলিতে যুক্ত করা হয়নি C++11
, আপনাকে মনে রাখতে হবে যে মান-নির্ধারণকারী সংস্থাগুলির অনুসরণ করার জন্য নির্দিষ্ট নির্দেশিকা রয়েছে। উদাহরণস্বরূপ, এএনএসআইকে C
বিশেষত বিদ্যমান অনুশীলনকে কোডাইফাই করার দায়িত্ব দেওয়া হয়েছিল, না কোনও নতুন ভাষা তৈরি করার জন্য । নইলে তারা পাগল হয়ে আমাদের অ্যাডা দিতে পারত :-)
পরে এই স্ট্যান্ডার্ডটির পুনরাবৃত্তিগুলিরও নির্দিষ্ট নির্দেশিকা রয়েছে এবং যুক্তি সংক্রান্ত নথিতে এটি পাওয়া যাবে (কমিটি কেন ভাষাটির পক্ষে যৌক্তিক নয়, কেন নির্দিষ্ট সিদ্ধান্ত নিয়েছিল তার যুক্তি)।
উদাহরণস্বরূপ C99
যৌক্তিক নথিতে বিশেষত দুটি গাইড C89
নীতি ফরোয়ার্ড করা হয়েছে যা কী যুক্ত করা যায় তা সীমাবদ্ধ করে:
- ভাষা ছোট এবং সরল রাখুন।
- কোনও অপারেশন করার একমাত্র উপায় সরবরাহ করুন।
নির্দেশিকা (প্রয়োজনীয়ভাবে সেই নির্দিষ্টগুলি নয়) পৃথক কর্ম গ্রুপের জন্য নির্দিষ্ট করা হয়েছে এবং তাই এটি সীমাবদ্ধ করেC++
কমিটিগুলি (এবং অন্যান্য সমস্ত আইএসও গ্রুপ) ।
এছাড়াও, মান-নির্ধারণকারী সংস্থাগুলি বুঝতে পারে যে তারা যে সিদ্ধান্ত নেয় তার প্রতিটি সুযোগের জন্য একটি ব্যয় ব্যয় হয় (একটি অর্থনৈতিক শব্দ যার অর্থ আপনার কী সিদ্ধান্ত নেওয়া উচিত) to উদাহরণস্বরূপ, 10,000 ডলার উবার-গেমিং মেশিন কেনার সুযোগ ব্যয়টি আপনার প্রায় অর্ধেকের সাথে প্রায় ছয় মাসের জন্য সৌহার্দ্যপূর্ণ সম্পর্ক (বা সম্ভবত সমস্ত সম্পর্ক)।
এরিক গোনারসন তার -100 পয়েন্টের ব্যাখ্যা দিয়ে এটি ভালভাবে ব্যাখ্যা করেন করেছেন যে মাইক্রোসফ্ট পণ্যগুলিতে কেন সবসময় জিনিসগুলি যুক্ত করা হয় না - মূলত কোনও বৈশিষ্ট্যটি গর্তে 100 পয়েন্ট শুরু করে যাতে এটি বিবেচনার জন্যও বেশ কিছুটা মূল্য যোগ করতে হয়।
অন্য কথায়, আপনি কি পরিবর্তে একটি অবিচ্ছেদ্য শক্তি অপারেটর (যা সত্য, কোন অর্ধ-শালীন কোডার দশ মিনিটের মধ্যে হুইপ করতে পারে) বা মাল্টি-থ্রেডিং স্ট্যান্ডার্ডটিতে যুক্ত হবে? নিজের জন্য, আমি ইউনিক্স এবং উইন্ডোজের অধীনে পৃথক বাস্তবায়নগুলি নিয়ে মশকরা করা পছন্দ করতাম না।
আমি হাজার হাজার এবং হাজার হাজার সংগ্রহ স্ট্যান্ডার্ড লাইব্রেরি (হ্যাশ, বিটি, লাল-কালো গাছ, অভিধান, স্বেচ্ছাসেবী মানচিত্র এবং আরও কিছু) এর পাশাপাশি দেখতে চাইছি, তবে যুক্তি অনুসারে:
একটি মান প্রয়োগকারী এবং প্রোগ্রামার মধ্যে একটি চুক্তি হয়।
এবং স্ট্যান্ডার্ড সংস্থাগুলিতে প্রয়োগকারীগুলির সংখ্যা প্রোগ্রামারগুলির সংখ্যার তুলনায় অনেক বেশি (বা কমপক্ষে এমন প্রোগ্রামার যারা সুযোগ ব্যয় বুঝতে পারে না)। তাহলে যে সব উপাদান যোগ করা হয়েছিল, পরবর্তী মান C++
হতে হবে C++215x
এবং সম্ভবত সম্পূর্ণরূপে কম্পাইলার ডেভেলপারদের তিনশত বছর পর বাস্তবায়ন করা হবে।
যাইহোক, বিষয়টি সম্পর্কে আমার (বরং প্রচুর) চিন্তাভাবনা। মানের তুলনায় যদি কেবলমাত্র ভোটগুলিকে পরিমাণের ভিত্তিতে হস্তান্তর করা হয় তবে আমি শীঘ্রই অন্য সকলকে জল থেকে বের করে দেব। শোনার জন্য ধন্যবাদ :-)