প্রথম দর্শনে, এটি সাধারণ সিনট্যাকটিক চিনি বলে মনে হচ্ছে।
তবে গভীরতর দিকে তাকালে, আমরা এটি সিনট্যাকটিক চিনির চেয়ে বেশি দেখতে পাই, কারণ এটি ব্যবহারকারী-সংজ্ঞায়িত প্রকারগুলি তৈরি করতে সি ++ ব্যবহারকারীর বিকল্পগুলি প্রসারিত করে যা একেবারে অন্তর্নির্মিত ধরণের মতো আচরণ করে। এতে, এই সামান্য "বোনাস" সি ++ এর সাথে খুব আকর্ষণীয় সি ++ 11 যুক্ত।
আমাদের কি সত্যিই সি ++ এ দরকার?
আমি বিগত বছরগুলিতে আমার লেখা কোডটিতে কয়েকটি ব্যবহার দেখতে পাচ্ছি, তবে কেবলমাত্র আমি এটি সি ++ এ ব্যবহার করি নি তার অর্থ এটি অন্য সি ++ বিকাশকারীদের পক্ষে আকর্ষণীয় নয় ।
সংক্ষিপ্ত বা দীর্ঘ পূর্ণসংখ্যার হিসাবে পূর্ণসংখ্যার সংখ্যা, ভাসা বা দ্বিগুণ (বা এমনকি দীর্ঘ ডাবল) হিসাবে প্রকৃত সংখ্যা এবং স্বাভাবিক বা প্রশস্ত চরিত্র হিসাবে অক্ষরের স্ট্রিং টাইপ করতে আমরা সি ++ (এবং সি-তে আমার অনুমান), সংকলক-সংজ্ঞায়িত আক্ষরিকগুলিতে ব্যবহার করেছি character ।
সি ++ এ, আমাদের নিজস্ব ধরণের (অর্থাত ক্লাস) তৈরি করার সম্ভাবনা ছিল , সম্ভাব্য কোনও ওভারহেড (ইনলাইনিং, ইত্যাদি) ছাড়াই। আমাদের মধ্যে অপারেটরদের তাদের ধরণের সাথে যুক্ত করার, তাদের অনুরূপ অন্তর্নির্মিত ধরণের মতো আচরণ করার সম্ভাবনা ছিল, যা সি ++ বিকাশকারীদের ম্যাট্রিক এবং জটিল সংখ্যাগুলি স্বাভাবিকভাবেই তাদের ভাষাতে যুক্ত করা যেতে পারে যদি তারা তাদের সাথে থাকতে পারে তবে তাদের ব্যবহার করতে সক্ষম করে। এমনকি আমরা কাস্ট অপারেটরগুলিও যুক্ত করতে পারি (যা সাধারণত একটি খারাপ ধারণা, তবে কখনও কখনও এটি কেবল সঠিক সমাধান)।
ব্যবহারকারী-প্রকারগুলি অন্তর্নির্মিত ধরনের হিসাবে আচরণ করতে আমরা একটি জিনিস এখনও মিস করেছি: ব্যবহারকারী-সংজ্ঞায়িত আক্ষরিক।
সুতরাং, আমি অনুমান করি এটি ভাষার জন্য একটি প্রাকৃতিক বিবর্তন, তবে যথাসম্ভব পরিপূর্ণ হওয়া: " আপনি যদি কোনও প্রকার তৈরি করতে চান এবং আপনি এটি একটি বিল্ট-ইন টাইপগুলির সাথে যতটা সম্ভব আচরণ করতে চান তবে এখানে সরঞ্জামগুলি রয়েছে are .. "
আমি অনুমান করতে পারি যে এটি বুলিয়ানস, পূর্ণসংখ্যা ইত্যাদি সহ প্রতিটি আদিমকে কাঠামো তৈরি করার এবং নেট এর সিদ্ধান্তের সাথে খুব মিল Ob এই সিদ্ধান্তটিই একা। নেট আদিমদের সাথে কাজ করার সময় জাভা এর নাগালের বাইরে রাখে, জাভা তার স্পেসিফিকেশনে যতই বক্সিং / আনবক্সিং হ্যাক না করে তা বিবেচনা করে না।
আপনার কি সত্যই সি ++ এ দরকার?
এই প্রশ্নটি আপনার উত্তর দেওয়ার জন্য। বাজরেন স্ট্রস্ট্রপ না। হার্ব সটার নয়। সি ++ স্ট্যান্ডার্ড কমিটির সদস্য যাই হোন না। এই কারণেই আপনার পছন্দ সি ++ এ রয়েছে এবং এগুলি কেবল অন্তর্নির্মিত প্রকারের মধ্যেই কোনও কার্যকর স্বরলিপি সীমাবদ্ধ করে না।
যদি আপনি এটি প্রয়োজন, তাহলে এটি একটি স্বাগত ছাড়াও। আপনি যদি না করেন, ভাল ... এটি ব্যবহার করবেন না। এটি আপনার জন্য কিছুই ব্যয় করবে।
সি ++ এ স্বাগতম, ভাষা যেখানে বৈশিষ্ট্যগুলি .চ্ছিক।
স্ফীত ??? আমাকে আপনার কমপ্লেক্সটি দেখান !!!
পুষ্পযুক্ত এবং জটিল (পাং উদ্দেশ্যে) এর মধ্যে পার্থক্য রয়েছে।
নীলদের মতো দেখানো হয়েছে যেমন ব্যবহারকারী-সংজ্ঞায়িত আক্ষরিকগুলি C ++ এ নতুন কোন ক্ষমতা যুক্ত করে? , একটি জটিল সংখ্যা লিখতে সক্ষম হওয়াই সি এবং সি ++ এ "সম্প্রতি" যুক্ত হওয়া দুটি বৈশিষ্ট্যের মধ্যে একটি:
// C89:
MyComplex z1 = { 1, 2 } ;
// C99: You'll note I is a macro, which can lead
// to very interesting situations...
double complex z1 = 1 + 2*I;
// C++:
std::complex<double> z1(1, 2) ;
// C++11: You'll note that "i" won't ever bother
// you elsewhere
std::complex<double> z1 = 1 + 2_i ;
এখন, C99 "ডাবল কমপ্লেক্স" টাইপ এবং সি ++ "এসটিডি :: কমপ্লেক্স" টাইপ উভয়ই অপারেটর ওভারলোডিং ব্যবহার করে গুণ, যোগ, বিয়োগ ইত্যাদি করতে সক্ষম।
তবে সি 99 এ তারা একটি বিল্ট-ইন টাইপ এবং বিল্ট-ইন অপারেটর ওভারলোডিং সমর্থন হিসাবে অন্য ধরণের যোগ করেছে। এবং তারা অন্য অন্তর্নির্মিত আক্ষরিক বৈশিষ্ট্য যুক্ত করেছে।
সি ++ তে তারা কেবল ভাষার বিদ্যমান বৈশিষ্ট্যগুলি ব্যবহার করেছিল, দেখেছিল যে আক্ষরিক বৈশিষ্ট্যটি ভাষার প্রাকৃতিক বিবর্তন ছিল এবং এটি এটিকে যুক্ত করেছে।
সি তে, যদি আপনার অন্য ধরণের জন্য একই স্বরলিপি বর্ধনের প্রয়োজন হয় তবে আপনার কোয়ান্টাম ওয়েভ ফাংশনগুলি (বা 3 ডি পয়েন্টস, বা আপনি আপনার কাজের ক্ষেত্রে যে কোনও বেসিক টাইপ ব্যবহার করছেন) যুক্ত করার জন্য আপনার লবিং না করা পর্যন্ত আপনি ভাগ্য থেকে দূরে রয়েছেন বিল্ট-ইন টাইপ হিসাবে সি স্ট্যান্ডার্ড সাফল্য লাভ করে।
সি ++ 11 এ আপনি নিজে এটি করতে পারেন:
Point p = 25_x + 13_y + 3_z ; // 3D point
ফুলে আছে? না , প্রয়োজন আছে, যেমন দেখানো হয়েছে যে সি এবং সি ++ উভয় কমপ্লেক্সকে কীভাবে তাদের আক্ষরিক জটিল মানগুলি উপস্থাপন করার জন্য একটি উপায় প্রয়োজন।
এটি কি ভুলভাবে ডিজাইন করা হয়েছে? না , এটি এক্সটেনসিবিলিটি মাথায় রেখে প্রতিটি অন্যান্য সি ++ বৈশিষ্ট্য হিসাবে ডিজাইন করা হয়েছে।
এটি কি কেবল চিহ্নিতকরণের জন্য? না , এটি এমনকি আপনার কোডে প্রকারের সুরক্ষা যোগ করতে পারে।
উদাহরণস্বরূপ, আসুন একটি সিএসএস ওরিয়েন্টেড কোডটি কল্পনা করুন:
css::Font::Size p0 = 12_pt ; // Ok
css::Font::Size p1 = 50_percent ; // Ok
css::Font::Size p2 = 15_px ; // Ok
css::Font::Size p3 = 10_em ; // Ok
css::Font::Size p4 = 15 ; // ERROR : Won't compile !
মানগুলির অ্যাসাইনমেন্টে শক্ত টাইপিং প্রয়োগ করা তখন খুব সহজ।
বিপদজনক?
ভাল প্রশ্ন. এই ফাংশনগুলি নামগতির হতে পারে? যদি হ্যাঁ, তবে জ্যাকপট!
যাইহোক, সমস্ত কিছুর মতো, কোনও সরঞ্জামকে ভুলভাবে ব্যবহার করা হলে আপনি নিজেকে হত্যা করতে পারেন । সি শক্তিশালী, এবং আপনি যদি সি বন্দুকটির অপব্যবহার করেন তবে আপনি আপনার মাথাটি ছোঁড়াতে পারেন। সি ++ এর কাছে সি বন্দুক রয়েছে, তবে এটি স্কেল্পেল, টিজার এবং অন্য যে কোনও সরঞ্জামটি আপনি এই টুলকিটে খুঁজে পাবেন। আপনি মাথার ত্বকের অপব্যবহার করতে পারেন এবং নিজেকে রক্ত ঝুঁকতে পারেন। অথবা আপনি খুব মার্জিত এবং শক্তিশালী কোড তৈরি করতে পারেন।
সুতরাং, প্রতিটি সি ++ বৈশিষ্ট্যের মতো, আপনার কি সত্যিই এটির প্রয়োজন আছে? এটি আপনাকে সি ++ ব্যবহার করার আগে অবশ্যই উত্তর দিতে হবে। আপনি যদি তা না করেন তবে এটির জন্য আপনার কোনও মূল্য হবে না। তবে আপনার যদি সত্যিই এটির প্রয়োজন হয় তবে অন্তত ভাষাটি আপনাকে হতাশ করে না।
তারিখের উদাহরণ?
আপনার ত্রুটিটি, আমার কাছে মনে হচ্ছে আপনি অপারেটরদের মিশ্রণ করছেন:
1974/01/06AD
^ ^ ^
এটি এড়ানো যায় না, কারণ / অপারেটর হওয়ায় সংকলককে অবশ্যই এটি ব্যাখ্যা করতে হবে। এবং, আফাইক, এটি একটি ভাল জিনিস।
আপনার সমস্যার সমাধান খুঁজতে আমি আক্ষরিক অন্য কোনও উপায়ে লিখব। উদাহরণ স্বরূপ:
"1974-01-06"_AD ; // ISO-like notation
"06/01/1974"_AD ; // french-date-like notation
"jan 06 1974"_AD ; // US-date-like notation
19740106_AD ; // integer-date-like notation
ব্যক্তিগতভাবে, আমি পূর্ণসংখ্যা এবং আইএসও তারিখগুলি বেছে নেব তবে এটি আপনার প্রয়োজনের উপর নির্ভর করে। যা ব্যবহারকারীর নিজস্ব আক্ষরিক নামগুলি সংজ্ঞায়িত করার পুরো পয়েন্ট।