স্ট্যান্ড :: স্ট্রিং এবং এসটিডি :: বেসিক_স্ট্রিংয়ের মধ্যে পার্থক্য কী? এবং কেন উভয় প্রয়োজন?


94

মধ্যে পার্থক্য কি std::stringএবং std::basic_string? এবং কেন উভয় প্রয়োজন?

উত্তর:


63

std::basic_stringচরিত্র ধরনের আউট স্ট্রিং তৈরীর জন্য একটি শ্রেণী টেমপ্লেট হয় std::stringএকটি হল typedefযে বর্গ টেম্পলেটের একটি বিশেষজ্ঞতা জন্য char। হ্যাঁ এগুলি উভয়ই প্রয়োজনীয় (বা কমপক্ষে মানক দ্বারা প্রয়োজনীয়)।


17
কেন তাদের উভয়ের প্রয়োজন?
মোহাম্মদ এল-নাকিব

4
সুতরাং আপনি বলছেন যে std :: স্ট্রিংটি টাইপডেফ std :: বেসিক_স্ট্রিং <char> এসটিডি :: স্ট্রিং?
অমীমাংসিত_বাহী

4
@ মুহাম্মাদআন্নাকীব 2.5 বছর দেরীতে তবে সংক্ষিপ্ত উত্তরটি হ'ল প্রশস্ত স্ট্রিং (wstring) (ইউনিকোড, চরিত্র অনুযায়ী 2 বাইট, wchar_t) সমর্থন প্রদান করবে।
অ্যান্ড্রু

46

std::stringএটি একটি তাত্ক্ষণিক std::basic_string<T>:

typedef std::basic_string<char> string

std::basic_stringসকল ধরণের স্ট্রিংয়ের জন্য একই ধরণের ইন্টারফেস থাকা প্রয়োজন ( wstringউদাহরণস্বরূপ)।


33
সঠিক শব্দটি হ'ল "বিশেষত্ব"। stringএকটি হল বিশেষজ্ঞতা এর basic_string
এএনটি

4
আমার ধারণা আপনি এ নিয়ে তর্ক করতে পারেন। "বিশেষত্ব" সাধারণত উত্তরাধিকার নির্দেশ করতে ব্যবহৃত হয়। একটি টেম্প্লেটেড {শ্রেণি | ফাংশন the টেমপ্লেট আর্গুমেন্টগুলি স্থির করে ইনস্ট্যান্ট করা হয়। আংশিক টেম্পলেট বিশেষীকরণ রয়েছে তবে এটি এখানে ব্যবহৃত হয় না।
দুপুর

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

4
এখানে "বিশেষত্ব" ব্যবহার করা বিভ্রান্তিকর হবে। একটি টেম্পলেট বিশেষায়নের একটি নির্দিষ্ট অর্থ রয়েছে (উত্তরাধিকারের সাথে সম্পর্কিত নয়) তবে এটি এখানে ব্যবহার করা হয়নি। স্ট্যান্ড :: স্ট্রিং টাইপএফের চেয়ে বেশি বা কম কিছুই নয়, যেমন: namespace std { typedef basic_string<char> string; }প্রযুক্তিগতভাবে এটি কোনও ইনস্ট্যান্টেশন নয়, তবে এটি কমপক্ষে নিকটবর্তী (ইনস্ট্যান্টেশন, সংজ্ঞা অনুসারে, একটি উদাহরণ তৈরি করে, এবং টাইপডেফ কেবল একটি নাম তৈরি করে, উদাহরণ নয়) )।
জেরি কফিন

4
@Charles: এটা কারণ (টেমপ্লেট সহ) বিভ্রান্তিকর এর, "বিশেষজ্ঞতা" স্বাভাবিকভাবে পারেন আংশিক বিশেষজ্ঞতা, বা স্পষ্ট বিশেষজ্ঞতা, বোঝায় না কি একটি সহজ ইনস্ট্যান্স যেমন শেষ হবে জন্য একটি typedef।
জেরি কফিন

17

std::stringহ'ল std::basic_stringএক ধরণের টেম্পলেটটির ইনস্ট্যান্টেশন char। আপনার উভয়ের প্রয়োজন যাতে আপনি পাশাপাশি বিভিন্ন স্ট্রিং তৈরি করতে পারেন char, যেমন একটি std::basic_string<wchar_t>বিস্তৃত অক্ষরের একটি স্ট্রিংয়ের জন্য। অথবা আপনি যদি 32 বিট উপাদানগুলির সাথে একটি স্ট্রিং চান std::basic_string<unsigned int>,।


4
আমি মনে করি এটি শীর্ষ ভোটের উত্তর হওয়া উচিত। এটি কখন আপনি std::basic_stringকোনও charপ্রকার ছাড়াই তাত্ক্ষণিকভাবে চলবেন না তার একটি ব্যবহারের কেস সরবরাহ করে ।
hlin117
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.