স্ট্রিং_ভিউ কী?


162

string_viewসি ++ লাইব্রেরি ফান্ডামেন্টাল টিএস ( এন 3921 ) এর মধ্যে প্রস্তাবিত বৈশিষ্ট্যটি সি ++ 17 এ যুক্ত হয়েছিল

যতদূর আমি বুঝতে পেরেছি এটি এমন এক ধরণের স্ট্রিং "ধারণা" যা কোনও ধরণের পাত্রে একটি দৃশ্যের প্রতিনিধিত্ব করে যা দেখতে পারা যায় এমন কিছু স্ট্রিং হিসাবে সঞ্চয় করতে পারে।

  • এটা কী ঠিক ?
  • ক্যানোনিকাল const std::string&প্যারামিটার ধরণের হওয়া উচিত string_view?
  • string_viewবিবেচনার বিষয়ে আরও একটি গুরুত্বপূর্ণ বিষয় আছে কি ?

4
অবশেষে, কেউ বুঝতে পারে যে স্ট্রিংগুলির জন্য আলাদা শব্দার্থবিজ্ঞানের প্রয়োজন, যদিও স্ট্রিং_ভিউয়ের পরিচয় করানো কেবল একটি ছোট পদক্ষেপ।
জন জেড। লি

উত্তর:


183

যে কোনও এবং সকল ধরণের "স্ট্রিং রেফারেন্স" এবং "অ্যারে রেফারেন্স" প্রস্তাবগুলির উদ্দেশ্য হ'ল ডেটা অনুলিপি করা এড়ানো যেটি ইতিমধ্যে অন্য কোথাও মালিকানাধীন এবং যার মধ্যে কেবল একটি পরিবর্তন-না-করা প্রয়োজন। string_viewপ্রশ্নে এক ধরনের প্রস্তাব নয়; আগে বলা হয়েছিল string_refএবং array_refখুব।

পয়েন্টার-থেকে-প্রথম-উপাদান এবং কিছু বিদ্যমান ডেটা অ্যারে বা স্ট্রিংয়ের আকারের জুড়ি সংরক্ষণ করার ধারণাটি সর্বদা ।

এই ধরণের ভিউ-হ্যান্ডেল শ্রেণিটি সুলভ মানের দ্বারা পাস করা যেতে পারে এবং সস্তা সাবস্ট্রিংয়ের ক্রিয়াকলাপ সরবরাহ করে (যা সাধারণ পয়েন্টার ইনক্রিমেন্ট এবং আকার সমন্বয় হিসাবে প্রয়োগ করা যেতে পারে)।

স্ট্রিংয়ের অনেকগুলি ব্যবহারের জন্য স্ট্রিংগুলির প্রকৃত মালিকানা প্রয়োজন হয় না এবং প্রশ্নযুক্ত স্ট্রিংটি প্রায়শই ইতিমধ্যে অন্য কারও মালিকানাধীন থাকে। সুতরাং অপ্রয়োজনীয় অনুলিপিগুলি এড়িয়ে দক্ষতা বৃদ্ধির একটি আসল সম্ভাবনা রয়েছে (আপনি যে সমস্ত বরাদ্দ এবং ব্যতিক্রমগুলি সংরক্ষণ করতে পারেন) তা ভাবেন।

মূল সি স্ট্রিংগুলি এমন সমস্যায় ভুগছিল যে নাল টার্মিনেটরটি স্ট্রিং এপিআইয়ের অংশ ছিল এবং সুতরাং আপনি অন্তর্নিহিত স্ট্রিং (একটি লা strtok) কে পরিবর্তন না করে সহজেই সাবস্ট্রিং তৈরি করতে পারবেন না । সি ++ এ, দৈর্ঘ্য পৃথকভাবে সঞ্চয় করে এবং পয়েন্টার এবং আকারকে এক শ্রেণিতে আবদ্ধ করে সহজেই সমাধান করা হয়।

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


19
জাহাজটি সেই দর্শনে যাত্রা করেছিল reference_wrapper, তাই না?
স্টিভ জেসোপ

5
@ KrerekSB- কে ভয় করছি আমি অনুসরণ না করি। অনুগ্রহ করে আপনি কি "এই জাতীয় রেফারেন্টাল ভিউ ক্লাসগুলির স্ট্যান্ডার্ড লাইব্রেরির বাকী অংশ থেকে সম্পূর্ণ আলাদা মালিকানা শব্দার্থবিজ্ঞান আছে" , অনুগ্রহ করে প্রসারিত করতে পারেন ? এটি আমার কাছে পরিষ্কার নয়: এটি কীভাবে রেফারেন্স / রেফারেন্সের থেকে আলাদা? বা সন্নিবেশের কারণে অবৈধ পুনরাবৃত্তি (যেমন স্টাড :: ভেক্টর)? আমাদের কাছে ইতিমধ্যে এই সমস্যাগুলি রয়েছে, এটি আমার পক্ষে খুব স্বাভাবিক যে একটি নন-মালিকানাধীন দৃষ্টিভঙ্গির মালিকানা বহির্ভূত পয়েন্টার / রেফারেন্স / পুনরাবৃত্তির মতো একই সমস্যা থাকবে।
আলী

5
@ অলি: আপনি যখন অন্য কোনও স্ট্যান্ডার্ড লাইব্রেরি কন্টেইনার ব্যবহার করছেন তখন আপনি কেবল ধারকটি ব্যবহার করেন এমন কোডটি দেখে কোডের সঠিকতাটি জোরদার করতে পারেন। তাই না string_view। (আমি বলছিলাম না যে আপনি কখনই ভাঙা কোডটি লিখতে পারবেন না Just
বিরতিটি

6
আমি অবাক হয়েছি যে তারা এগুলি দিয়ে std::rangeযায় নি boost::iterator_range- আইএমও স্ট্রিং ভিউ ধারণা থেকে ভাল
চার্লস সালভিয়া

19
@ এনডব্লিউ: অনেক লোক এবং ভাষা সি ++ এর ভয়াবহ ডিফল্টের জন্য বিলাপ করেছে এবং মনে করে যে "কনস্ট" এবং "ভাগ না করা" অবশ্যই ডিফল্ট হওয়া উচিত, "পারস্পরিক পরিবর্তনযোগ্য" এবং "ভাগ" করা হয়েছে এমন স্পষ্ট, বিরল ব্যতিক্রম।
কেরেক এসবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.