সি ++ সম্পর্কিত বিষয় যা সি প্রোগ্রামারগুলিকে নার্ভাস করে
গুদের নীচে প্রচুর যাদু ঘটছে; কনস্ট্রাক্টর, ডেস্ট্রাক্টর, ভার্চুয়াল পদ্ধতি, টেমপ্লেটস ইত্যাদি সমতুল্য সি কোডের তুলনায় সি ++ কোড লিখতে অনেক সহজ এবং দ্রুত করতে পারে, তবে এর মাধ্যমে বোঝা এবং যুক্তি (আপনি সি ++ এবং এর সম্পর্কিত কনভেনশনগুলি কতটা ভাল জানেন তার উপর নির্ভর করে)। হিসাবে হিসাবে সহজ কিছু Foo newFoo;
একটি ডাকা হতে পারে অনেক , কোড কীভাবে বর্গ জন্য কন্সট্রাকটর উপর নির্ভর করে Foo
(এবং কোনো শ্রেণীর উপর নির্ভর করে) সংজ্ঞায়িত করা হয়েছে। কনটেইনারে পুনরাবৃত্তি করার ++it
পরিবর্তে কনভেনশনটি লিখতে হবে it++
কেননা পোস্টফিক্সে ++
প্রায়শই একটি ব্যয়বহুল অনুলিপি অপারেশন জড়িত।
আপনি যা করছেন তার উপর নির্ভর করে কিছু অ-তুচ্ছ ওভারহেড থাকতে পারে, বিশেষত সাধারণ কাজের জন্য। নিম্নলিখিত দুটি প্রোগ্রাম নিন, প্রথমটি সিতে, দ্বিতীয়টি সি ++ এ:
/* C version */
#include <stdio.h>
int main(void)
{
char greeting[] = "Hello, world";
printf("%s\n", greeting);
return 0;
}
/* end C version */
/* C++ version */
#include <iostream>
#include <string>
int main(void)
{
std::string greeting("Hello, world");
std::cout << greeting << std::endl;
return 0;
}
/* end C++ version */
মূল আচরণ, উত্সের দিক থেকে পুরো পার্থক্য নয়, তবে এসসিএলএস 10 বাক্সে আমি জিসিসি ৪.১.২ নিয়ে কাজ করি, প্রাক্তনটি ~ 9 কেবি আকারের এক্সিকিউটেবল উত্পাদন করে, অন্যদিকে 12.5kb (কোনও অপ্টিমাইজেশন) লাগে না ), প্রায় 28% বড়। string
সি স্ট্রিং লাইব্রেরির চেয়ে আইএমওর সাথে সি ++ টাইপ কাজ করা অনেক সহজ, এবং সি ++ স্ট্রিমগুলি সি স্ট্রিমের চেয়ে অনেক বেশি নমনীয় এবং কাস্টমাইজযোগ্য, তবে সত্যিকারের মস্তিষ্ক-মৃত কোডের জন্য এগুলি ওভারহেডের পক্ষে মূল্যবান নাও হতে পারে ।
সি ++ সি এর তুলনায় একটি বিশাল ভাষা, কিছু জটিল জটিল শব্দার্থবিজ্ঞানের সাথে। সি +++ এর চেয়ে দক্ষ হয়ে উঠতে অনেক বেশি সময় লাগে, যার অর্থ প্রচুর লোকেরা যারা সি ++ জানার দাবি করেন তারা এটি জানেন না এবং তারা মনে করেন যে তারা করে।
সি সম্পর্কে বিষয়গুলি যা সি ++ প্রোগ্রামারগুলিকে নার্ভাস করে
সি কোনও কল্পনা দ্বারা কোনও সুরক্ষিত প্রোগ্রামিং ভাষা নয়; কোনো সীমার মধ্যে রাখার অ্যারে তে টিক চিহ্ন দেওয়ার (বর্তমানে মৃত মাধ্যমে এটা হতে নানারকম আচরণ প্রচুর বাড়ে gets
বা মাধ্যমে ফাংশন scanf
সঙ্গে %s
এবং %[
রূপান্তর নির্দিষ্টকরী)। সি ++ কমপক্ষে আপনাকে এমন ধারক সরবরাহ করে যা আপনি যদি তাদের বর্তমানে সংজ্ঞায়িত ব্যাপ্তির বাইরে অ্যাক্সেস করার চেষ্টা করেন তবে ব্যতিক্রম ছুঁড়ে দেয়; সমস্ত সি আপনাকে দেয় (যদি আপনি ভাগ্যবান) একটি বিভাজন লঙ্ঘন।
সিতে মেমরি পরিচালনা খুব পরিশ্রমী এবং ত্রুটিযুক্ত প্রবণ, যে সরঞ্জামগুলি সি ++ আপনাকে সরবরাহ করে তার তুলনায়। যদি আপনি নিজের কন্টেইনারটি তৈরি করে থাকেন তবে বরাদ্দ সফল হয়েছে তা নিশ্চিত করার জন্য, কোনও ত্রুটি ইত্যাদির ক্ষেত্রে কোনও আংশিক বরাদ্দকে ব্যাক আপ করা ইত্যাদি নিশ্চিত করার জন্য আপনি সমস্ত কল malloc
এবং free
কলগুলি মিলে যাওয়ার জন্য দায়বদ্ধ , সি ++ এ আপনি কেবল আইটেমগুলি যুক্ত করুন বা ধারক থেকে আইটেম সরান। যদি সমস্যা হয় তবে একটি ব্যতিক্রম ছুঁড়ে দেওয়া হবে।
তেমনি, সিতে ত্রুটি সামলানো হ'ল সি ++ সরবরাহকারী সরঞ্জামগুলির (যেমন ব্যতিক্রমগুলি) তুলনা করে পাছায় ব্যথা হয়। সত্যিই মজার বিষয়টি যখন আপনি একগুচ্ছ স্মৃতি বরাদ্দ করেন এবং তারপরে আপনার প্রসেসিংয়ে কোনও প্রাচীর আঘাত করেন; যেমন আপনাকে ব্যাকআপ করতে হবে, আপনাকে সেই স্মৃতিটি সঠিক ক্রমে প্রকাশ করতে হবে। সি ++ এবং RAII নীতিগুলি সহ, এটি করা (তুলনামূলকভাবে) সহজ।
সুতরাং আমি কখন অন্যটির ওপরে ব্যবহার করব?
আপনি যা লিখছেন তা যদি বগি সহজ হয় তবে এটি পড়ুন / এটি দিয়ে মাক করুন / এপ্লিকেশনটি থেকে মুক্তি দিন, যার আচরণটি ইনপুট এবং আউটপুট এবং পারফরম্যান্স সম্পর্কিত ক্ষেত্রে পরিষ্কারভাবে বর্ণনা করা যায় , তবে সি ওভার সি ++ এর চেয়ে বেশি পছন্দ করুন। অন্যথায়, সি ++ পছন্দ করুন