আমি একটি অভ্যন্তরীণ লাইব্রেরি ব্যবহার করছি যা প্রস্তাবিত সি ++ গ্রন্থাগার নকল করার জন্য ডিজাইন করা হয়েছিল এবং গত কয়েক বছরে আমি দেখতে পেয়েছি এর ইন্টারফেসটি ব্যবহার থেকে পরিবর্তিত std::string
হয়েছে string_view
।
তাই আমি নতুন ইন্টারফেসের সাথে সঙ্গতিপূর্ণভাবে আমার কোডটি যথাযথভাবে পরিবর্তন করছি। দুর্ভাগ্যক্রমে, আমার যা পাস করতে হবে তা হল একটি স্টাডি :: স্ট্রিং প্যারামিটার এবং এমন একটি কিছু যা একটি স্ট্যান্ড :: স্ট্রিংয়ের ফেরতের মান value সুতরাং আমার কোডটি এরকম কিছু থেকে পরিবর্তিত হয়েছে:
void one_time_setup(const std::string & p1, int p2) {
api_class api;
api.setup (p1, special_number_to_string(p2));
}
প্রতি
void one_time_setup(const std::string & p1, int p2) {
api_class api;
const std::string p2_storage(special_number_to_string(p2));
api.setup (string_view(&p1[0], p1.size()), string_view(&p2_storage[0], p2_storage.size()));
}
এই পরিবর্তনটি আমাকে আরও বেশি কোড (সম্ভবত স্ক্রু করার জন্য) ব্যতীত এপিআই ক্লায়েন্ট হিসাবে কিনেছিল তা আমি সত্যিই দেখতে পাই না। এপিআই কলটি কম নিরাপদ (এপিআই এর কারণে আর তার পরামিতিগুলির জন্য স্টোরেজটির মালিক নয়), সম্ভবত আমার প্রোগ্রাম 0 টি কাজ সংরক্ষণ করেছে (অপ্টিমাইজেশান সংকলনকারীরা এখন করতে পারে) এর ফলে, এবং যদি এটি কাজটি না সঞ্চয় করে তবে তা কেবলমাত্র হবে কয়েকটি বরাদ্দ যা প্রারম্ভের পরে বা কোথাও কোনও বড় লুপে কখনই করা হবে না এবং হবে না। এই API এর জন্য নয়।
যাইহোক, এই পদ্ধতির পরামর্শটি আমি অন্য কোথাও দেখতে পাচ্ছি বলে মনে হচ্ছে উদাহরণস্বরূপ এই উত্তর :
অন্যদিকে, সি ++ 17 যেহেতু আপনার কোনও স্ট্যান্ড :: স্ট্রিং :: স্ট্রিং_ভিউয়ের পক্ষে হওয়া উচিত নয়:
আমি সেই পরামর্শটি অবাক করে দিয়েছি, যেহেতু এটি প্রাথমিকভাবে অপ্টিমাইজেশনের উদ্দেশ্যে, একটি কম নিরাপদ (মূলত গৌরবময় পয়েন্টার এবং দৈর্ঘ্য) দিয়ে তুলনামূলকভাবে নিরাপদ বস্তুর প্রতিস্থাপনের জন্য সর্বজনীনভাবে সমর্থন করে বলে মনে হচ্ছে।
সুতরাং যখন উচিত string_view ব্যবহার করা যেতে, এবং এটি না করা উচিত?
<string>
শিরোনামে রয়েছে এবং স্বয়ংক্রিয়ভাবে ঘটে। এই কোডটি প্রতারণা এবং ভুল।
std::string_view
সরাসরি কনস্ট্রাক্টরকে কল করতে হবে না , আপনার সরাসরি স্ট্রিংগুলিstd::string_view
সরাসরি পদ্ধতিতে নেওয়া উচিত এবং এটি স্বয়ংক্রিয়ভাবে রূপান্তরিত হবে।