স্ট্যান্ড :: স্ট্রিং এবং সি-স্টাইলের স্ট্রিং লিটারেলের সাথে তুলনা করা


9

ধরুন আমার কাছে নিম্নলিখিত কোড রয়েছে:

#include <iostream>
#include <string>
#include <iomanip>
using namespace std; // or std::

int main()
{
    string s1{ "Apple" };
    cout << boolalpha;
    cout << (s1 == "Apple") << endl; //true
}

আমার প্রশ্ন: সিস্টেম কীভাবে এই দুটিয়ের মধ্যে চেক করে? s1সময় একটি অবজেক্ট "Apple"একটি হল সি-শৈলী স্ট্রিং আক্ষরিক।

যতদূর আমি জানি, বিভিন্ন উপাত্তের ধরণের তুলনা করা যায় না। আমি এখানে কি মিস করছি?



2
Fww, যতক্ষণ না এক প্রকারের অন্য ধরণের রূপান্তর করা যায়, আপনি সাধারণত তাদের তুলনা করতে পারেন। আপনি std::stringএকটি সি-স্ট্রিং থেকে একটি সূচনা করতে পারেন ।
নাথান অলিভার

উত্তর:


16

এটি নিম্নলিখিত তুলনা অপারেটরের জন্য সংজ্ঞায়িত হওয়ার কারণেstd::string

template< class CharT, class Traits, class Alloc >
bool operator==( const basic_string<CharT,Traits,Alloc>& lhs, const CharT* rhs );  // Overload (7)

এটি std::stringএবং এর মধ্যে তুলনার অনুমতি দেয় const char*। এইভাবে যাদু!


@ পিট বেকারের মন্তব্য চুরি করা :

"সম্পূর্ণতার জন্য, যদি এই ওভারলোডটি না উপস্থিত থাকে তবে তুলনাটি এখনও কাজ করবে; সংকলকটি সি-স্টাইলের স্ট্রিংstd::string থেকে টাইপের একটি অস্থায়ী বস্তু তৈরি করবে এবং এর প্রথম ওভারলোডটি ব্যবহার করে দুটি বস্তুর তুলনা করবে std::stringoperator==

template< class CharT, class Traits, class Alloc >
bool operator==( const basic_string<CharT,Traits,Alloc>& lhs,
                 const basic_string<CharT,Traits,Alloc>& rhs );   // Overload (1)

এই কারণেই এই অপারেটরটি (অর্থাত্ ওভারলোড )) সেখানে রয়েছে: এটি সেই অস্থায়ী বস্তুর প্রয়োজনীয়তা এবং এটি তৈরি এবং ধ্বংসের সাথে জড়িত ওভারহেডকে দূর করে ""


8
এবং, সম্পূর্ণতার জন্য, যদি এই ওভারলোডটির অস্তিত্ব না থাকে তবে তুলনাটি এখনও কার্যকর হবে; সংকলক std::string from the C-style string and compare the two std :: স্ট্রিং অবজেক্ট টাইপের একটি অস্থায়ী অবজেক্ট তৈরি করবে । এই অপারেটরটি এখানে কেন রয়েছে: এটি অস্থায়ী বস্তুর প্রয়োজনীয়তা এবং এটি তৈরি এবং ধ্বংসের সাথে জড়িত ওভারহেডকে সরিয়ে দেয়।
পিট বেকার

1
@ পেটবেকার অবশ্যই, আমি এটি উত্তরে যুক্ত করেছি। নির্দেশ করার জন্য ধন্যবাদ!
জেজেও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.