কেন std :: is_pod সি ++ ২০ এ অবমুক্ত করা হচ্ছে?


92

std::is_podসম্ভবত সি ++ ২০ এ অবহেলা করা হবে।
এই পছন্দের কারণ কী? std::is_podটাইপটি আসলে একটি পিওডি হয় কিনা তা জানতে আমার জায়গায় কী ব্যবহার করা উচিত ?



4
কোনও প্রকারের পিওডি হলে আপনি কেন জানতে চান?
মার্ক গ্লিস

8
@ মার্কগ্লিস এই স্ট্যান্ডার্ডে পরিবর্তনগুলি বা এই জাতীয় বৈশিষ্ট্য সম্পর্কে একটি প্রশ্নের প্রয়োজনের অর্থ এই নয় যে আমি সেই বৈশিষ্ট্যটি ব্যবহার করতে চাই। আমি দেখেছি অননুমোদিত যখন googling নোট এবং আমি শুধু জানতে কেন এটা অবচিত ছিল অদ্ভুত ছিল।
স্কিপজ্যাক

আমার প্রশ্নটি আসলে একটি পরোক্ষ উত্তর ছিল: এটি সরানো হয়েছে কারণ (মোটামুটিভাবে) কোনও ধরণের পিওডি কিনা তা জিজ্ঞাসার কোনও কারণ নেই।
মার্ক গ্লিস

4
আমি এটির জন্য এটি ব্যবহার করব static_assertযাতে সি কোডের সাথে ভাগ করা উচিত এমন কোনও স্ট্রাইক স্পর্শ না করে।
মিরকো

উত্তর:


70

পিওডিকে দুটি বিভাগে প্রতিস্থাপন করা হচ্ছে যা আরও ঘনত্ব দেয়। নভেম্বর 2017 C ++ মান মিটিং এটা সম্পর্কে বলার এই ছিল:

"সাধারণ পুরাতন ডেটা" (পিওডি) এর ধারণাকে অবজ্ঞা করছে। এটি আরও দুটি সংখ্যক ধরণের শ্রেণির, "তুচ্ছ" এবং "স্ট্যান্ডার্ড-লেআউট" এর সাথে প্রতিস্থাপিত হয়েছে। "পিওডি" "তুচ্ছ এবং স্ট্যান্ডার্ড লেআউট" এর সমতুল্য, তবে অনেক কোড নিদর্শনগুলির জন্য কেবল "তুচ্ছ" বা "" আদর্শ লেআউট "" এর সংকীর্ণ সীমাবদ্ধতা উপযুক্ত; এইরূপ নির্ভুলতা উত্সাহিত করার জন্য, "পড" এর ধারণাটি হ্রাস করা হয়েছিল। লাইব্রেরির বৈশিষ্ট্য is_pod এছাড়াও অনুরূপভাবে হ্রাস করা হয়েছে।

সাধারণ ডেটা ধরণের জন্য is_standard_layoutফাংশনটি ব্যবহার করুন , তুচ্ছ তথ্য প্রকারের জন্য (যেমন সহজ স্ট্রাক্ট) is_trivialফাংশনটি ব্যবহার করুন ।


4
সুতরাং, তারা remove_cvrefএকদিকে যুক্ত করে, এটি একটি রচিত বৈশিষ্ট্য, অন্যদিকে তারা অন্য রচিত বৈশিষ্ট্যগুলি সরিয়ে দেয়? এটি উন্মাদ বলে মনে হচ্ছে। :-)
স্কিপজ্যাক

6
এটি তুচ্ছ এবং মানক লেআউট এবং পুনরাবৃত্তভাবে POD জড়িত একটি ধারা বলে মনে হচ্ছে। পুনরাবৃত্তির ধারাটি কি অপ্রয়োজনীয়? অর্থাৎ এটি কি গ্যারান্টিযুক্ত std::is_pod<T>{} == (std::is_trivial<T>{} && std::is_standard_layout<T>{})?
ইয়াক্ক - অ্যাডাম নেভ্রামুমন্ট

4
@ এসকিপজ্যাক: পিওডি অপসারণের বিষয়টি হ'ল এটি আর কোনও উদ্দেশ্য করে না। "তুচ্ছ" এবং "স্ট্যান্ডার্ড লেআউট" রচনাটি আসলে সি ++ তে কিছু বোঝায় না এবং আপনি আসলে যা করছেন তার উপর ভিত্তি করে আপনি "তুচ্ছ" বা "স্ট্যান্ডার্ড লেআউট" না দিয়ে আপনি POD- তে কোনও ইন্টারফেস সীমাবদ্ধ করবেন এমন কোনও কারণ নেই there's এর সাথে. বিপরীতে, "cvref" মুছে ফেলার অর্থ কিছু; ফলাফল প্রকারটি কোনও অবৈধ প্রকার যা কোনও যোগ্যতা ছাড়াই রয়েছে।
নিকল বোলাস

4
আমি একজনের পক্ষে সত্যিই এই পরিবর্তনের প্রশংসা করি। একটি সিস্টেম সফ্টওয়্যার প্রোগ্রামার হিসাবে, "স্ট্যান্ডার্ড লেআউট" আসলে আমি সেদিকেই যত্ন নিয়েছিলাম এবং পিওডদের কনস্ট্রাক্টর না থাকার প্রয়োজনীয়তার কারণে তারা আমার সাধারণ "কনস্ট্রাক্টর উইথ স্ট্রাক্ট" আইডিয়োমকে সঠিকভাবে বর্ণনা করতে পারেন নি। পূর্বে আমি সেই "ছদ্ম-পিওডি" ডাকতে বাধ্য হয়েছিলাম। সুন্দর, তবে আপনি যখন আপনার কোডটিতে সিউডোপড রাখার কথা বলছেন তখন নির্দিষ্ট অ্যানিম ভক্তরা আপনাকে মজাদার দেখায়।
টেড

4
হয় std::is_pod, std::is_triviaএবং std::is_standard_layoutসংকলন সময়? কারণ অ্যালগরিদমগুলিতে, আপনি সি-লেআউটটি সামঞ্জস্যপূর্ণ হলে ম্যাকসিপি () ইত্যাদি ব্যবহার করে দ্রুত অ্যালগরিদমের জন্য ইচ্ছা করতে পারেন।
এসজেহউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.