সি ++ 17 [[nodiscard]]
বৈশিষ্ট্যটির সাথে পরিচয় করিয়ে দেয়, যা প্রোগ্রামাররা এমনভাবে ফাংশনগুলি চিহ্নিত করতে সক্ষম করে যে প্রত্যাবর্তিত বস্তুটি কলার দ্বারা বাতিল করা হলে সংকলক একটি সতর্কতা উত্পন্ন করে; একই বৈশিষ্ট্যটি একটি সম্পূর্ণ শ্রেণীর ধরণের যুক্ত করা যেতে পারে।
আমি মূল প্রস্তাবটিতে এই বৈশিষ্ট্যটির অনুপ্রেরণা সম্পর্কে পড়েছি এবং আমি জানি যে সি ++ 20 স্ট্যান্ডার্ড ফাংশনগুলিতে এই বৈশিষ্ট্যটি যুক্ত করবে std::vector::empty
, যার নামগুলি প্রত্যাবর্তনের মান সম্পর্কিত কোনও অস্পষ্ট অর্থ প্রকাশ করে না।
এটি একটি দুর্দান্ত এবং দরকারী বৈশিষ্ট্য। আসলে, এটি প্রায় খুব দরকারী বলে মনে হচ্ছে । আমি যেখানেই পড়েছি [[nodiscard]]
, লোকেরা এটি নিয়ে আলোচনা করে যেন আপনি এটি কেবল কয়েকটি নির্দিষ্ট ফাংশন বা প্রকারগুলিতে যুক্ত করে বাকীটি সম্পর্কে ভুলে যান। বিশেষ করে নতুন কোড লেখার সময় কেন একটি ছাড়ারযোগ্য মানটি একটি বিশেষ ক্ষেত্রে হওয়া উচিত? বাতিল করা ফেরতের মানটি সাধারণত কোনও বাগ বা কমপক্ষে সম্পদের অপচয় নয়?
এবং নিজেই সি ++ এর ডিজাইন নীতিগুলির মধ্যে একটি নয় যে সংকলকটি যতটা সম্ভব ত্রুটিটি ধরা উচিত?
যদি তাই হয় তবে [[nodiscard]]
আপনার নিজের, নন-লেগ্যাসি কোডটি প্রায় প্রতিটি একক নন- void
ফাংশন এবং প্রায় প্রতিটি একক শ্রেণীর প্রকারে যুক্ত করবেন না কেন?
আমি এটি নিজের কোডে করার চেষ্টা করেছি এবং এটি এতটা মারাত্মক ভার্বোস বাদে জাভাটির মতো অনুভূত হতে শুরু করে fine মনে হবে আরো অনেক কিছু কম্পাইলার করতে প্রাকৃতিক ডিফল্টরূপে বাতিল রিটার্ন মান সম্পর্কে সতর্ক ব্যতীত কয়েক অন্যান্য ক্ষেত্রে জন্য যেখানে আপনি আপনার উদ্দেশ্য চিহ্নিত [*] ।
আমি যেমন স্ট্যান্ডার্ড প্রস্তাবনাগুলি, ব্লগ এন্ট্রি, স্ট্যাক ওভারফ্লো প্রশ্নগুলি বা ইন্টারনেটে অন্য কোথাও এই সম্ভাবনাটি সম্পর্কে শূন্য আলোচনা দেখেছি, আমার অবশ্যই কিছু অনুপস্থিত হবে।
এ জাতীয় যান্ত্রিকরা কেন নতুন সি ++ কোডে অর্থ পাবে না? ভারবোসিটি কি [[nodiscard]]
প্রায় সর্বত্র ব্যবহার না করার একমাত্র কারণ ?
[*] তত্ত্ব অনুসারে, আপনার [[maydiscard]]
পরিবর্তে কোনও বৈশিষ্ট্যের মতো কিছু থাকতে পারে , যা printf
স্ট্যান্ডার্ড-লাইব্রেরি বাস্তবায়নের মতো ফাংশনেও পূর্ববর্তীভাবে যুক্ত করা যেতে পারে ।
const
"সাধারণ" শ্রেণি (বা বরং "সাধারণ পুরাতন ডেটা অবজেক্ট") ফুটিয়ে তুলতে পারে।
std::vector
বা এর জন্য আরও প্রাসঙ্গিক std::unique_ptr
, যার মধ্যে আপনার ক্লাস সংজ্ঞাতে কেবল আপনার ডেটা সদস্যের প্রয়োজন। আমি উভয় ভাষা নিয়ে কাজ করেছি; জাভা একটি ওকিশ ভাষা, তবে এটি আরও ভার্ভোজ।
operator =
উদাহরণ স্বরূপ. এবংstd::map::insert
।