একজন সহকর্মী এটি লিখতে চেয়েছিলেন:
std::string_view strip_whitespace(std::string_view sv);
std::string line = "hello ";
line = strip_whitespace(line);
আমি বলেছিলাম যে প্রত্যাবর্তন string_view
আমাকে অস্বস্তিকর করে তুলেছিল একটি অগ্রাধিকার , এবং তদুপরি, এখানে এলিয়াসিংটি আমার কাছে ইউবির মতো দেখাচ্ছে looked
আমি দৃ with়তার সাথে বলতে পারি যে line = strip_whitespace(line)
এই ক্ষেত্রে সমতুল্য line = std::string_view(line.data(), 5)
। আমি বিশ্বাস করি যে কল করবে string::operator=(const T&) [with T=string_view]
, যার সমতুল্য line.assign(const T&) [with T=string_view]
সংজ্ঞা দেওয়া হয়েছে line.assign(line.data(), 5)
, যার সমতুল্য সংজ্ঞা দেওয়া হয়েছে , যা এটি করার জন্য সংজ্ঞায়িত হয়েছে:
Preconditions: [s, s + n) is a valid range.
Effects: Replaces the string controlled by *this with a copy of the range [s, s + n).
Returns: *this.
তবে এই কথাটি বলে না যে যখন এলিয়াসিং হয় তখন কী হয়।
আমি গতকাল সিপ্লেং স্লেকে এই প্রশ্নটি করেছি এবং মিশ্র উত্তর পেয়েছি। এখানে সুপার অনুমোদনমূলক উত্তর এবং / অথবা বাস্তব গ্রন্থাগার বিক্রেতাদের বাস্তবায়নের অভিজ্ঞতাগত বিশ্লেষণ খুঁজছেন।
আমি পরীক্ষার বিষয় লিখেছিলেন জন্য string::assign
, vector::assign
, deque::assign
, list::assign
, এবং forward_list::assign
।
- Libc ++ এই সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে work
- Libstdc ++ এগুলি সেগফাল্ট ব্যতীত তাদের সমস্ত কাজ করে
forward_list
। - আমি এমএসভিসির লাইব্রেরি সম্পর্কে জানি না।
Libstdc ++ এ সেগফল্ট আমাকে আশা দেয় যে এটি ইউবি; তবে আমি কমপক্ষে সাধারণ ক্ষেত্রে এই কাজটি করার জন্য libc ++ এবং libstdc ++ উভয়ই দুর্দান্ত চেষ্টা করতে দেখছি।
*this
। তবে বিদ্যমান স্টোরেজটিকে পুনরায় ব্যবহার করা থেকে বিরত করার জন্য আমি কিছুই দেখতে পাচ্ছি না, তবে স্টোরেজটি অনুলিপি করার কারণে কপিরাইট-ওভারিংয়ের শব্দার্থবিরোধী নয় ified
assign
প্রয়োজনীয়তার পূর্বশর্ত লঙ্ঘনের কারণে ।