একজন সহকর্মী এটি লিখতে চেয়েছিলেন:
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 প্রয়োজনীয়তার পূর্বশর্ত লঙ্ঘনের কারণে ।