কেন স্ট্যান্ড :: স্প্যানের তুলনা অপারেটরগুলির অভাব রয়েছে?


10

/ / প্লেইন অ্যারে এবং একই ধরণেরstd::span উপ-অঞ্চলে হালকা ওজনের রেফারেন্স হিসাবে নকশা করা হয়নি ? এটির সাথে সামঞ্জস্য হওয়ার জন্য, এটির এপিআইতে তুলনামূলক অপারেটরগুলিও থাকা উচিত নয়? বাদ দেওয়ার পেছনে যুক্তি কী ছিল?std::vectorstd::array

নোট: তুলনা অপারেটরদের দ্বারা, আমি হয় পূর্ণ সেট মানে ( <, <=, ...) বা মহাকাশযান<=>


দুর্দান্ত প্রশ্ন আইএমও, আমিও ভাবছি। operator==অনুপস্থিত। ESP। ভেক্টরের জন্য আমি প্রায়শই সরাসরি তুলনা করা সুবিধাজনক বলে মনে করি। স্থির আকারের স্প্যান প্রকারের সাথে অসুবিধার কারণে এটি হতে পারে, যদিও আমি নিশ্চিত নই।
ডারুন

এটি জিএসএল :: স্প্যানের মতো দেখায়, যেখান থেকে স্ট্যান্ড :: স্প্যানটি সংস্করণ করা হয়েছে সেগুলির মধ্যে এটিও অন্তর্ভুক্ত নয়।
দারুন

1
@DanielLangr কেন মত একটি আভিধানিক তুলনা std::vectorএবং std::arrayনা? তারা ইতিমধ্যে এই ধরণের জন্য ঠিক এর মতো সংজ্ঞায়িত করা হয়েছে, তাই এখানে কেন নয়।
টিমো

2
নোট করুন যে P0122R7 এর জন্য তুলনা করার প্রস্তাব দেয় span, তবে বর্তমান খসড়া মানটি এতে অন্তর্ভুক্ত করে না।
ড্যানিয়েল ল্যাঙ্গার

1
@darune gsl::span নেই (এবং সবসময় হয়নি) তুলনা অপারেটরদের আছে। তারা কেবল তাদের নিজের শিরোনামে
ব্যারি

উত্তর:


3

ড্যানিয়েল ল্যাঙ্গার যেমন উল্লেখ করেছেন , std::spanএর প্রাথমিক প্রস্তাব P0122 তে তুলনা অপারেটর রয়েছে । এই অপারেটরগুলি তখন কার্যকরী খসড়া N4791 সাল থেকে সরানো হবে , এবং কারণগুলি P1085-এ বর্ণিত হয়েছে ।

সংক্ষেপে, অনুলিপিটির জন্য std::span"অগভীর" (যার অর্থ অনুলিপি করা std::spanতার অন্তর্নিহিত উপাদানগুলি অনুলিপি করে না, এবং কোনও কনস্ট std::spanতার অন্তর্নিহিত উপাদানগুলিকে সংশোধন করা থেকে বিরত করে না) সুতরাং তুলনা যদি উপস্থিত থাকে তবে "অগভীর" হওয়া উচিত ধারাবাহিকতার জন্য।

এই কাগজ নিম্নলিখিত উদাহরণ দেয়:

উদাহরণ 1:

T oldx = x;
change(x);
assert(oldx != x);
return oldx;

উদাহরণ 2:

void read_only(const T & x);

void f()
{
  T tmp = x;
  read_only(x);
  assert(tmp == x);
}

এই উদাহরণগুলির মধ্যে দেওয়া দৃ .়তা ব্যর্থ হতে পারে, যদি T = std::spanএটি নিয়মিত ধরণের না হয়।

কেউ তর্ক করতে পারেন যে std::string_viewঅগভীর অনুলিপি আছে কিন্তু গভীর তুলনা। P1085 এরও এর ব্যাখ্যা রয়েছে:

এটি মিলছে string_viewতবে এটি এতে চিহ্নিত string_viewউপাদানগুলিকে সংশোধন করতে পারে না এবং এইভাবে অগভীর অনুলিপিটি string_viewঅনুলিপি-অন-অনুলিপিটির মতো বলে মনে করা যেতে পারে।


মনে রাখবেন যে অক্ষরের অ্যারের মালিককে কিছুই দেখায় না কেন এটি মূল বিন্যাসের দিকে std::string_viewনির্দেশ করে storage সুতরাং, বলুন, std::map<std::span<T>, U>হিসাবে হিসাবে ভাঙ্গা std::map<std::string_view, U>। আইএমএইচও, std::string_viewতুলনা অপারেটরগুলিও থাকা উচিত নয়।
লাইবার্টা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.