সি ++ এর মধ্যে সবচেয়ে খারাপ অভ্যাস, সাধারণ ভুলগুলি [বন্ধ]


35

লিনাস টোরওয়াল্ডসের এই বিখ্যাত ভাঁড়টি পড়ার পরে , আমি ভাবলাম যে সি ++ তে প্রোগ্রামারদের জন্য আসলে কী সমস্যা রয়েছে। আমি স্পষ্টভাবে এই প্রশ্ন এবং এর উত্তরগুলিতে চিকিত্সা হিসাবে টাইপস বা খারাপ প্রোগ্রাম প্রবাহের কথা উল্লেখ করছি না , তবে আরও উচ্চ-স্তরের ত্রুটিগুলির ক্ষেত্রে যা সংকলক দ্বারা সনাক্ত করা যায় না এবং ফলস্বরূপ প্রথম বাগের মধ্যে সম্পূর্ণ বাগের ফলস্বরূপ হয় না, সম্পূর্ণ ডিজাইনের ত্রুটি, সিগুলিতে অসম্ভব এমন জিনিসগুলি কিন্তু নতুনদের দ্বারা সি ++ এ সম্পন্ন হওয়ার সম্ভাবনা রয়েছে যারা তাদের কোডের পুরো প্রভাব বোঝেন না।

আমি একটি বিশাল কর্মক্ষমতা হ্রাস নির্দেশ করে উত্তরগুলি স্বাগত জানাই যেখানে এটি সাধারণত প্রত্যাশিত হয় না। আমার এক অধ্যাপক একবার আমাকে এলআর (1) পার্সার জেনারেটর সম্পর্কে যা বলেছিলেন তার একটি উদাহরণ:

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


6
আপনি সি / সি ++ এ তৈরি করতে পারেন এমন আরও কিছু বাজে ত্রুটিগুলি বেশিরভাগ কারণ হ'ল সি হেরিটেজ ... অপরিজ্ঞাত আচরণ, ম্যানুয়াল মেমরি পরিচালনা ইত্যাদি পড়ুন the এছাড়াও, অধ্যাপকের পরামর্শটি বগাস / ভুল বলে মনে হচ্ছে (আমার কাছে কে না একটি সি ++ বিশেষজ্ঞ) - টেমপ্লেট ইনস্ট্যান্টেশন দ্বারা ফাংশনগুলির জন্য vtable সহ একটি সাধারণ শ্রেণি পাওয়া উচিত virtual, তাই না?

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

5
@ ফেলিক্সডমব্যাক: বোর্ডে এতটা উদারতার সাথে স্টেটেড এবং প্রয়োগ করা হয়েছে, আপনার অধ্যাপকের এই উক্তিটি কেবল বিশাল অজানা দেখায়। যখন আপনার ডিজাইনের কোনও ধরণের রানটাইম পলিমারফিজম প্রয়োজন হয় , তখন ভার্চুয়াল ফাংশনগুলি ব্যবহার করা সবচেয়ে ভাল পছন্দ; যখন আপনার এটির প্রয়োজন হবে না, এটি ব্যবহার করবেন না: উদাহরণস্বরূপ, আপনি উদ্ভূত ক্লাসগুলি ব্যবহার করার কারণে আপনার ভার্চুয়াল হওয়ার জন্য সমস্ত পদ্ধতির দরকার নেই।
ফ্রেড নুরক

5
@ ম্যাসন হুইলারের: আরটিটিআই-তে প্রকারের তথ্য রয়েছে, একজন dynamic_castসফল হওয়া উচিত কিনা তা নির্ধারণ করতে যথেষ্ট এবং আরও কয়েকটি জিনিস রয়েছে, তবে প্রতিচ্ছবি আরও অনেক কিছুকে কভার করে, এতে সদস্যের বৈশিষ্ট্য বা কার্যাবলী সম্পর্কিত তথ্য পুনরুদ্ধার করতে সক্ষম হওয়াও অন্তর্ভুক্ত নয় সি ++ এ উপস্থিত।
ডেভিড রদ্রিগেজ - ফ্রি

5
অধ্যাপকের মন্তব্য কিছুটা প্রতারক, কারণ উত্তরাধিকার এবং ভার্চুয়াল ফাংশনগুলি কোনও বড় পারফরম্যান্স হিট নয়। অল্প পরিমাণে উত্তরাধিকার ব্যবহারের পরামর্শটি ভাল, তবে এটি দক্ষতার চেয়ে প্রোগ্রাম কাঠামোর সমস্যা। উত্তরাধিকার, বিশেষত সুরক্ষিত সদস্যদের সাথে, আপনি যতটা মিলিয়ে যাচ্ছেন ঠিক তত কাছাকাছি, এবং আপনার যদি এটির প্রয়োজন না হয় তবে আপনি এটি ব্যবহার করবেন না।
ডেভিড থর্নলি

উত্তর:


69

টরভাল্ডস এখানে তার পাছার বাইরে কথা বলছে।


ঠিক আছে, কেন সে তার গাধা থেকে কথা বলছে:

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

তাঁর সবচেয়ে উদ্দেশ্যমূলক বিষয় হিসাবে কী আলোকিত হতে পারে:

  • এসটিএল এবং বুস্ট একদম বাজে << - যাই হোক না কেন। তুমি একটা নির্বোধ.
  • এসটিএল এবং বুস্ট অসীম পরিমাণে ব্যথা ঘটায় <- হাস্যকর। স্পষ্টতই তিনি উদ্দেশ্যমূলকভাবে অতিরিক্ত পরিশ্রমী তবে তার বাস্তব বক্তব্য এখানে কী? আমি জানি না। যখন আপনি স্পিরিটে বা কোনও কিছুর সংকলক বমি করেন তখন সমস্যাগুলি নির্ধারণ করার চেয়ে আরও কিছু তুচ্ছ জটিল, তবে শূন্য * এর মতো সি কন্সট্রাক্টের অপব্যবহারের কারণে ইউবি ডিবাগিংয়ের চেয়ে বেশি বা ততোধিক জটিলতা খুঁজে পাওয়া যায় না।
  • সি ++ দ্বারা উত্সাহিত বিমূর্ত মডেলগুলি অদক্ষ। <- কি পছন্দ? তিনি কখনই প্রসারিত হন না, কখনও তাঁর অর্থের কোনও উদাহরণ সরবরাহ করেন না, তিনি কেবল এটি বলেছিলেন। BFD। যেহেতু আমি বলতে পারছি না তিনি কী উল্লেখ করছেন, বিবৃতিটি "খণ্ডন" করার খুব কম পয়েন্ট রয়েছে। এটি সি ধর্মাবলম্বীদের একটি সাধারণ মন্ত্র তবে এটি এটিকে আর বোধগম্য বা বোধগম্য করে না।
  • সি ++ এর সঠিক ব্যবহারের অর্থ আপনি নিজেকে সি দিকগুলিতে সীমাবদ্ধ করুন। <- প্রকৃতপক্ষে ওয়ার্ল্ড সি ++ কোড এটি করেছে যাতে আমি এখনও ডব্লুটিএফকে জানি না যে সে কী বিষয়ে কথা বলছে।

মূলত, টরভাল্ডস তার পাছা থেকে কথা বলছে। কোনও কিছুর বিষয়ে কোনও বোধগম্য যুক্তি নেই। এই ধরণের বাজে কথাগুলির গুরুতর প্রত্যাবর্তন আশা করা কেবল নির্বোধ। আমি এমন কোনও কিছুর প্রত্যাখ্যানের বিষয়ে "প্রসারিত" করতে বলছি যা আমি যেখানে বললাম সেখান দিয়ে প্রসারিত হওয়ার আশা করা হয়েছিল। আপনি যদি সত্যিই সত্যবাদী হন, তবে টরভাল্ডস যা বলেছিল সেটির দিকে আপনি তাকান যে তিনি আসলে কিছুই বলেননি anything

কেবল Godশ্বর বলেছেন কারণ এর অর্থ এই নয় যে এটি কিছু অর্থবোধ করে না বা কিছু এলোমেলো বোজো এটি বলেছে তার চেয়ে বেশি গুরুত্ব সহকারে নেওয়া উচিত। সত্যি কথা বলতে গেলে Godশ্বর হ'ল আরেকটি এলোমেলো বোজো।


আসল প্রশ্নের জবাব:

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

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

সি তেমন ভাল হয় না তা বলার অপেক্ষা রাখে না। আমি অবশ্যই সি ++ এর চেয়ে বেশি পছন্দ করি। সি প্রোগ্রামাররা সি পছন্দ করেন। খেলতে ট্রেড অফস এবং বিষয়গত পছন্দ রয়েছে। এছাড়াও রয়েছে প্রচুর ভুল তথ্য এবং এফইউডি ভাসমান। আমি বলব যে আরও প্রায় FUD এবং ভুল তথ্য রয়েছে প্রায় C ++ এর প্রায় ভাসমান তবে আমি এই বিষয়ে পক্ষপাতদুষ্ট। উদাহরণস্বরূপ, "ব্লোট" এবং "পারফরম্যান্স" সমস্যাগুলি সি ++ এর মধ্যে সম্ভবত বেশিরভাগ সময় প্রধান সমস্যা নয় এবং অবশ্যই বাস্তবতার অনুপাতের বাইরে উড়িয়ে দেওয়া হয়।

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


1
আইরোনিক, ২০০ 2007 সালের পরেও গিটটি কেবল লিনাক্সের বহনযোগ্য সংস্করণে চলে। ঠিক আছে, যে কোনও সিস্টেম যা ইউনিক্সের মতো ছিল। এরপরে, গিট তৈরির দিকে পরিচালিত করে এমন পরিস্থিতিতে, আমি অবশ্যই এটি তার বিরুদ্ধে রাখছি না।
ক্রিস কে

9
লিনাস যে কোনও ভাল সি ++ প্রোগ্রামার যারা তার জন্য কাজ করতে চান তা খুঁজে পাওয়ার জন্য খুব কঠিন সময় আছে। ভাবছি কেন? আমি মনে করি এটি কেবল একটি মুরগি এবং ডিমের ধরণের সমস্যা।
বো পারসন

19

আমি সবসময়ই ভেবেছিলাম সি ++ এর বিপদগুলি অনভিজ্ঞ, ক্লাস প্রোগ্রামারদের সাথে সি দ্বারা অত্যন্ত অতিরঞ্জিত।

হ্যাঁ, সি ++ জাভা জাতীয় কিছু তুলনা করা শক্ত, তবে আপনি যদি আধুনিক কৌশলগুলি ব্যবহার করে প্রোগ্রাম করেন তবে শক্তিশালী প্রোগ্রামগুলি লেখা খুব সহজ। আমি ভাল নেই যে সি আরো অনেক কিছু সময় প্রোগ্রামিং কঠিন ++, আমি আর জাভা মত ভাষায় না, এবং আমি প্রায়ই নিজেকে টেমপ্লেট এবং RAII যখন আমি অন্য ভাষায় ডিজাইন ভালো লেগেছে নির্দিষ্ট সি ++ বিমূর্ত অনুপস্থিত পাবেন।

এটি বলেছে যে, সি ++ তে কয়েক বছর প্রোগ্রামিংয়ের পরেও, এখন এবং পরে আমি সত্যিই বোকা ভুল করব যা উচ্চ স্তরের ভাষায় সম্ভব হবে না। সি ++ এর একটি সাধারণ সমস্যাটি অবজেক্টের আজীবন অগ্রাহ্য করছে: জাভা এবং সি # তে আপনাকে সাধারণত অবজেক্ট লাইফটাইম * সম্পর্কে যত্ন নিতে হবে না, কারণ সমস্ত বস্তু গাদাতে বিদ্যমান এবং সেগুলি আপনার জন্য যাদুকর আবর্জনা সংগ্রহকারী দ্বারা পরিচালিত।

এখন, আধুনিক সি ++ এ সাধারণত আপনার জীবনযাত্রার অবজেক্ট সম্পর্কে খুব বেশি যত্ন নেওয়া প্রয়োজন না। আপনার কাছে ডেস্ট্রাক্টর এবং স্মার্ট পয়েন্টার রয়েছে যা আপনার জন্য অবজেক্টের জীবনকাল পরিচালনা করে। 99% সময়, এটি আশ্চর্যজনকভাবে কাজ করে। তবে প্রতিবার এবং পরে, আপনি একটি ঝুঁকিপূর্ণ পয়েন্টার (বা রেফারেন্স।) দ্বারা বিচলিত হবেন উদাহরণস্বরূপ, সদ্য সাম্প্রতিককালে আমার একটি অবজেক্ট ছিল (আসুন এটি কল করুন Foo) যা অন্য কোনও বস্তুর অভ্যন্তরীণ রেফারেন্স পরিবর্তনশীল ছিল (আসুন আমরা এটি কল করি Bar)। এক পর্যায়ে, আমি নির্বোধের সাথে জিনিসগুলি এমনভাবে সাজিয়েছি যা Barআগে সুযোগের বাইরে চলে যায় Foo, তবুও Fooএর ডেস্ট্রাক্টর এর সদস্য ফাংশনটি কল করে শেষ করেন Bar। বলা বাহুল্য, জিনিসগুলি ভালভাবে পরিণত হয়নি।

এখন, আমি এর জন্য সত্যিই সি ++ কে দোষ দিতে পারি না। এটি আমার নিজের খারাপ নকশা ছিল, তবে মূল বিষয়টি হল এই ধরণের জিনিসটি কোনও উচ্চ-স্তরের, পরিচালিত ভাষায় ঘটবে না। এমনকি স্মার্ট পয়েন্টার এবং এর মতো, আপনার মাঝে মাঝে অবজেক্ট লাইফ-টাইম সম্পর্কে সচেতন হওয়া প্রয়োজন।


* যদি পরিচালিত সংস্থানটি মেমরি হয় তবে তা।


8
জাভা এবং সি # তে কখনই বস্তুর আজীবন সত্যই যত্ন নেওয়া উচিত নয়? তাদের জিসি মেমোরির যত্ন নেয়, তবে এটি আমার জন্য আরআইআইয়ের একটি ছোট্ট অংশ; উদাহরণস্বরূপ, এই ভাষাগুলির বিভিন্ন "ডিসপোজযোগ্য" ইন্টারফেস দেখুন।
ফ্রেড নুরক

অবজেক্ট লাইফটাইম যত্নের রয়ে যাবে তার ইনপুট / আউটপুট লাইব্রেরি এর অসুবিধাজনক নকশা ছাড়া জাভা বিরল হও।
dan04

আপনার জটলা রেফারেন্স ইস্যুটি এমন কিছু যা আমি সমাধান করার চেষ্টা করতে আগ্রহী। এটি সমাধানের দিকে আমি যে দিকে যাচ্ছি সে সম্পর্কে আমি আমার ব্লগে আলোচনা শুরু করেছি (পয়েন্টার প্রতিশ্রুতি)। মূলত আমি মনে করি ভাষা আরও কয়েকটি স্মার্ট পয়েন্টার ব্যবহার করতে পারে। আপনার আগ্রহী হলে সেই আলোচনায় অংশ নিন। অন্য কারও পক্ষে তাই হয়নি ... তবে যদি আপনি এমন কিছু সমাধান করেন তবে দেখতে চান ... আমি আসলে 10% এরও বেশি সময় ইস্যুটিতে চলে আসছি।
এডওয়ার্ড স্ট্রেঞ্জ

13

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

তার অভিজাত অংশের একটি অংশ (তিনি সি ++ এর বিরুদ্ধে তার তদন্তের জন্য পরিচিত) তার উপর ভিত্তি করে আরও বেশি লোক সি ++ গ্রহণ করবেন এবং কিছু বিমূর্ততা কী লুকায়িত করে এবং ভুল ধারণা তৈরি করে তা আসলে বুঝতে না পেরে কোড লিখবেন।


3
std::vector<bool>প্রতিটি মান পরিবর্তনের জন্য পুনরাবৃত্তির ব্যয় কত ? for ( std::vector<bool>::iterator it = v.begin(), end = v.end(); it != end; ++it ) { *it = !*it; }? কি বিমূর্ত মধ্যে দূরে হয় *it = !*it;?
ডেভিড রদ্রিগেজ - ফ্রি

2
যদিও ভুল ভাষায় সমালোচিত নির্দিষ্ট ভাষার ঘৃণ্য
বিষয়টিকে

2
@ ফ্রেড নূরক: std::vector<bool>এটি একটি সুপরিচিত ভুল, তবে যা আলোচনা করা হচ্ছে এটি এটির একটি দুর্দান্ত উদাহরণ: বিমূর্ততা ভাল, তবে তারা কী লুকায় তা সম্পর্কে আপনাকে সতর্ক থাকতে হবে। একই ব্যবহারকারীর কোডেও ঘটতে পারে এবং ঘটবে। নতুনদের জন্য, আমি ব্যতিক্রম ব্যবহার প্রবাহ নিয়ন্ত্রণ, এবং কোড সম্পাদনের জন্য সি ++ এবং জাভা মানুষের মধ্যে উভয় দেখেছি যে একটি পাখির ফাংশন কল আসলে একটি বেলআউট ব্যতিক্রম লঞ্চার যে মত দেখায়: void endOperation();হিসাবে প্রয়োগ করা throw EndOperation;। একটি ভাল প্রোগ্রামার সেই বিস্ময়কর নির্মাণগুলি এড়াতে পারবে , তবে আসল বিষয়টি হ'ল আপনি সেগুলি খুঁজে পেতে পারেন।
ডেভিড রদ্রিগেজ - ফ্রি

5
টরভাল্ডসের একটি বিষয় হ'ল: তিনি সি +++ (সেখানে আরও সি ​​++ প্রবর্তক বলে মনে হয়) এবং সি ++ আরও জটিল হওয়ার কারণে স্টিপার লার্নিং বক্রতা রয়েছে এবং কোণার ক্ষেত্রে ট্রিপিংয়ের আরও সম্ভাবনা রয়েছে বলে তিনি কেবল সি -+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++> ।
ডেভিড রদ্রিগেজ - ফ্রি

2
+1, লিনাস ঠিক এটিই অভিযোগ করছেন। তিনি অ্যান্টি-সি ++ হিসাবে এসেছেন, তবে এটি আসলে তা নয়। তিনি কেবলমাত্র অ্যান্টি-সি ++ - প্রোগ্রামার।
গ্রেফ্যাড

13

try/catchব্লকের অতিরিক্ত ব্যবহার

File file("some.txt");
try
{
  /**/

  file.close();
}
catch(std::exception const& e)
{
  file.close();
}

এটি সাধারণত জাভার মতো ভাষা থেকে উদ্ভূত হয় এবং লোকেরা যুক্তি দেয় যে সি ++ এর কোনও finalizeধারা নেই।

তবে এই কোডটি দুটি বিষয় দেখায়:

  • এর fileআগে একটি তৈরি try/catchকরতে হবে কারণ আপনি আসলে closeএমন কোনও ফাইল থাকতে পারবেন না যা বিদ্যমান নেই catch। এটি fileবন্ধ হয়ে যাওয়ার পরে দৃশ্যমান এটিতে "স্কোপ ফাঁস" বাড়ে । আপনি একটি ব্লক যোগ করতে পারেন তবে ...: /
  • যদি কেউ চারপাশে returnএসে tryসুযোগের মাঝে একটি যোগ করে , তবে ফাইলটি বন্ধ করা হয়নি (যার কারণে লোকেরা finalizeদফার অভাব সম্পর্কে কুড়ান)

যাইহোক, সি ++ এ, আমাদের এই সমস্যাটি মোকাবেলার আরও অনেক কার্যকরী উপায় রয়েছে যা:

  • জাভার finalize
  • সি # 'গুলি using
  • যান এর defer

আমাদের কাছে আরআইআইআই রয়েছে, যার সত্যই আকর্ষণীয় সম্পত্তিটি SBRM(স্কোপড বাউন্ড রিসোর্সেস ম্যানেজমেন্ট) হিসাবে সর্বোত্তমভাবে সংক্ষিপ্ত হয় ।

শ্রেণিটি তৈরি করে যাতে এটির ধ্বংসকারী তার নিজস্ব সম্পদগুলি পরিষ্কার করে দেয়, আমরা তার প্রতিটি ব্যবহারকারীর উপর রিসোর্স পরিচালনার উপর চাপ দিই না!

এই বৈশিষ্ট্য আমি অন্য কোন ভাষায় মিস্, এবং সম্ভবত এক যে অধিকাংশ ভুলে যাওয়া হয়।

সত্যটি হ'ল try/catchলগইন ছাড়াই সমাপ্তি এড়াতে শীর্ষ স্তরে পৃথক করেও সি ++ তে ব্লক লেখার খুব কমই দরকার আছে ।


1
আমি মনে করি না যে এটি জাভার প্রভাব যেমনটি এটি সি হিসাবে রয়েছে (আপনি সরাসরি এখানে fopenএবং বিকল্প হিসাবে fcloseএখানে রাখতে পারেন RA) এখানে কাজগুলি করার জন্য 'রাইআইআই হ'ল সঠিক পদ্ধতি, তবে যারা সি ++ থেকে সি লাইব্রেরি ব্যবহার করতে চান তাদের পক্ষে এটি অসুবিধাজনক নয় ient ।
dan04

এই ধরণের উত্তরের জন্য, সঠিক সমাধানের উদাহরণ সরবরাহ করা উপযুক্ত হবে।
ক্লজ জর্জেনসেন

@ ক্লজ জর্জেনসেন: ঠিক আছে, দুর্ভাগ্যক্রমে সমাধানটি আসলে "শোভিত" নয় কারণ এটিতে কেবল জড়িত রয়েছে File file("some.txt");এবং এটিই (না open, না close, না try...)
ম্যাথিউ এম।

ডি'রও আরআইআইআই রয়েছে
ডেমি

@ ডিমেট্রি: আমি ডি এর সাথে খুব বেশি পরিচিত নই, আপনি কীভাবে ব্যাখ্যা করতে পারবেন যে কীভাবে আরআইআই আবর্জনা সংগ্রহের সাথে যোগাযোগ করে? আমি জানি যে পাইথনে আপনি একটি "ডিনিট" পদ্ধতি লিখতে পারেন, তবে নথির বিবরণে সতর্ক করা হয়েছে যে রেফারেন্সের চক্রের ক্ষেত্রে কিছু বস্তু তাদের ডিনিট পদ্ধতি বলে না দেখবে।
ম্যাথিউ এম।

9

আপনার মানদণ্ডের সাথে খাপ খায় এমন একটি সাধারণ ত্রুটি আপনার ক্লাসে বরাদ্দ মেমরি নিয়ে কাজ করার সময় অনুলিপি নির্মাণকারীরা কীভাবে কাজ করে তা বোঝা যাচ্ছে না। ক্র্যাশ বা মেমরি ফাঁস ফিক্সিংয়ের জন্য আমি যে পরিমাণ সময় ব্যয় করেছি তা হারিয়েছি কারণ একটি 'নুব' তাদের বস্তুগুলিকে একটি মানচিত্র বা ভেক্টরে রেখেছিল এবং অনুলিপি নির্মাণকারী এবং ধ্বংসকারীদের সঠিকভাবে লিখেনি।

দুর্ভাগ্যক্রমে সি ++ এর মতো 'লুকানো' গোচায় পূর্ণ। তবে এ সম্পর্কে অভিযোগ করা অভিযোগ করার মতো আপনি ফ্রান্সে গিয়েছিলেন এবং লোকেরা কী বলছে তা বুঝতে পারেনি। আপনি যদি সেখানে যেতে যাচ্ছেন তবে ভাষাটি শিখুন।


1
আমি মনে করি সি ++ এর সাথে সমস্যা হ'ল নিজেকে পায়ে গুলি করা খুব সহজ। অবশ্যই, আশেপাশে ভাল সি ++ প্রোগ্রামার রয়েছে, সি ++ তে প্রচুর ভাল সফটওয়্যার লেখা রয়েছে। তবে একজন ভাল সি ++ বিকাশকারী হওয়া খুব কঠিন। স্কট মায়ার্স 'দক্ষ সি ++' সিরিজটি ভাষাটির কতটি সূক্ষ্মতা দেখায়।
মার্কো মোস্তাপিক

আমি রাজী. যদিও সমস্যার অংশটি হ'ল সি ++ প্রোগ্রামারদের বেশিরভাগ (সংখ্যাগরিষ্ঠ) মনে করেন যে তারা যখন স্পষ্টভাবে না করেন তখন তারা কী করছেন। আপনি কি "কার্যকর সি ++" বোঝাতে চেয়েছিলেন?
হেনরি

কমপক্ষে সি ++ 0 x এর অনুলিপি / মুভ ক্রিয়াকলাপগুলির জড়িত প্রজন্মের নতুন বরং সীমাবদ্ধ নিয়মগুলির সাথে এটি আরও ভাল হচ্ছে। তিনটি নিয়ম লঙ্ঘনকারী ক্ষেত্রে বেশিরভাগ ক্ষেত্রে অনুলিপি প্রযোজনার অনুলিপি তৈরি হচ্ছে এবং একটি সতর্কতা উত্থাপন করা উচিত।
বিক্রয়বিটজে

6

সি ++ পারবেন বৈশিষ্ট্য এবং প্রোগ্রামিং শৈলীর জন্য একটি দুর্দান্ত বিভিন্ন, কিন্তু তার মানে এই নয় যে, এই আসলে সি জন্য ভাল উপায় ++, ব্যবহার করা হয়। এবং প্রকৃতপক্ষে, ভুলভাবে সি ++ ব্যবহার করা অবিশ্বাস্যরকম সহজ।

এটি সঠিকভাবে শিখতে হবে এবং বুঝতে হবে , কেবল (বা এটির মতো অন্য কোনও ভাষা ব্যবহার করা যেমন ব্যবহার করে) শেখা অকার্যকর এবং ত্রুটি-প্রবণ কোডে পরিচালিত করবে।


4

ভাল ... শুরুতে আপনি C ++ FAQ লাইট পড়তে পারেন

তারপরে, বেশিরভাগ লোক সি ++ এর জটিলতা সম্পর্কে বই লেখার কেরিয়ার তৈরি করেছেন:

ভেষজ সুটার এবং স্কট মায়ারগুলি যথা।

তোরভাল্ডসের বেদনাবিহীন পদার্থের জন্য ... মানুষের কাছে আসুন, গুরুত্ব সহকারে: এই ভাষাটির সংক্ষিপ্তসারগুলি মোকাবেলা করার জন্য আর কোনও ভাষা এত কালি ছড়িয়ে যায় নি। আপনার পাইথন এবং রুবি এবং জাভা বইগুলি সমস্ত অ্যাপ্লিকেশন লেখায় ফোকাস করে ... আপনার সি ++ বইগুলি নির্বাক ভাষা বৈশিষ্ট্য / টিপস / ট্র্যাপগুলিতে ফোকাস করে।


1
হুম ... javapuzzlers.com , jimbrooks.org/web/python/# সমস্যাগুলি । আমি বলতে চাই এক্সিলারেটেড সি ++ (একটি উদাহরণ হিসাবে) কোডগুলি কীভাবে লিখতে হয় তার চেয়ে বেশি মনোনিবেশ করে ...
জেরি কফিন

1
আপনি সংস্থার কয়েকটি উদাহরণ তুলে ধরেছেন যা তাদের নিজ নিজ ভাষায় প্রান্তের কেস দেখায়; যে জিনিস অদ্ভুত চেহারা এবং আপনি পুরোপুরি নিশ্চিত কিভাবে তারা কাজ চাই (যদিও পাইথন তালিকা কাপড় কাছাকাছি) নেই ... সি ++ একটি সম্পূর্ণ হয়েছে শিল্প বিষয় আছে যা ইশারা চেহারা পুরোপুরি বৈধ যে উপায়ে আচরণ আপনি আশা করবেন না।
লাল-ময়লা

3

খুব বেশি ভারী টেম্প্লেটিংয়ের ফলে প্রথমে বাগের ফলাফল নাও হতে পারে। সময়ের সাথে সাথে, যদিও লোকেদের সেই কোডটি সংশোধন করতে হবে এবং একটি বিশাল টেম্পলেট বুঝতে তাদের খুব কষ্ট হবে। ততক্ষণে বাগগুলি প্রবেশ করে - ভুল বোঝাবুঝির কারণে "এটি সংকলিত হয় এবং পরিচালিত হয়" মন্তব্যগুলি হয়, যা প্রায়শই প্রায়-তবে-না-যথেষ্ট-সঠিক কোডের দিকে নিয়ে যায়।

সাধারণত যদি আমি নিজেকে তিন-স্তরের গভীর জেনেরিক টেম্পলেটটি করতে দেখি তবে আমি থামি এবং ভাবি যে কীভাবে এটি একটিতে কমে যেতে পারে। প্রায়শই ফাংশন বা ক্লাসগুলি বের করে সমস্যার সমাধান করা হয়।


8
পরিবর্তনের প্রয়োজনীয়তার মুখে জটিল কোড বজায় রাখার ফলে সর্বদা প্রচুর প্রচেষ্টা ছাড়াই বাগের কারণ হয়, টেমপ্লেটগুলির জন্য বিশেষত বিশেষ কিছুই নেই।
ফ্রেড নুরক

2

সতর্কতা: এই কথার সমালোচনার মতো এটি উত্তরের মতো প্রায় নয়, যা "উত্তরবিহীন" তার উত্তরে লিঙ্ক করেছেন।

তাঁর প্রথম মূল বিষয়টি (অনুমিত) "সদা পরিবর্তনের মান"। বাস্তবে, তিনি যে উদাহরণগুলি দিয়েছিলেন সেগুলি মানক হওয়ার আগেই সি ++ তে পরিবর্তনের সাথে সম্পর্কিত । ১৯৯৯ সাল থেকে (যখন প্রথম সি ++ স্ট্যান্ডার্ড চূড়ান্ত হয়েছিল) ভাষায় পরিবর্তনগুলি বেশ ন্যূনতম হয়েছিল - আসলে, অনেকেই যুক্তি দেখান যে আসল সমস্যাটি হ'ল আরও পরিবর্তন করা উচিত ছিল। আমি যুক্তিসঙ্গতভাবে নিশ্চিত যে মূল কোডটি ++ স্ট্যান্ডার্ডের সাথে সংগতিপূর্ণ এমন সমস্ত কোড এখনও বর্তমান মানের সাথে সঙ্গতিপূর্ণ। যদিও এটি কিছুটা কম নিশ্চিত, যদি না কিছু দ্রুত পরিবর্তন হয় (এবং বেশিরভাগ অপ্রত্যাশিতভাবে) তবে আসন্ন সি ++ স্ট্যান্ডার্ডের সাথেও এটি একই পরিমাণে সত্য হবে (তাত্ত্বিকভাবে, সমস্ত কোড যা ব্যবহার করেছে)exportভেঙে যাবে, কিন্তু কার্যত কারও অস্তিত্ব নেই; ব্যবহারিক দৃষ্টিকোণ থেকে এটি কোনও সমস্যা নয়)। আমি অন্য কয়েকটি ভাষা, ওএস (বা কম্পিউটার সম্পর্কিত আরও কিছু) এর কথা ভাবতে পারি যা এ জাতীয় কোনও দাবি করতে পারে।

তারপরে তিনি "সদা পরিবর্তনকারী শৈলীতে" চলে যান। আবার, তাঁর বেশিরভাগ পয়েন্টগুলি আজেবাজে খুব কাছে। তিনি for (int i=0; i<n;i++)"পুরানো এবং পর্দার" এবং for (int i(0); i!=n;++i)"নতুন হটনেস" হিসাবে চিহ্নিত করার চেষ্টা করেন । বাস্তবতাটি হ'ল এমন কিছু প্রকারের জন্য যখন এই ধরনের পরিবর্তনগুলি বোঝা যায়, কারণ intএটি কোনও তাত্পর্যপূর্ণ করে না - এবং আপনি যখন কিছু অর্জন করতে পারেন তখনও ভাল বা সঠিক কোড লেখার জন্য এটি খুব কমই প্রয়োজন। এমনকি খুব ভালভাবে, তিনি একটি মোলিওল থেকে পাহাড় তৈরি করছেন।

তার পরবর্তী দাবিটি হ'ল সি ++ "" ভুল দিকটি অনুকূল করে তুলছেন "- বিশেষত, যখন তিনি স্বীকার করেছেন যে ভাল লাইব্রেরি ব্যবহার করা সহজ, তিনি দাবি করেন যে সি ++" ভাল লাইব্রেরিগুলি লেখা প্রায় অসম্ভব করে তোলে। " এখানে, আমি বিশ্বাস করি যে তার অন্যতম মৌলিক ভুল। বাস্তবে, প্রায় কোনও ভাষার জন্য ভাল গ্রন্থাগারগুলি লেখা অত্যন্ত কঠিন। খুব কম সময়ে, একটি ভাল গ্রন্থাগার লেখার জন্য কিছু সমস্যার ডোমেন এত ভালভাবে বোঝার দরকার হয় যে আপনার কোডটি সেই ডোমেনে (বা সম্পর্কিত) বেশ কয়েকটি সম্ভাব্য অ্যাপ্লিকেশনের পক্ষে কাজ করে। সি ++ আসলে যা ঘটে থাকে তার বেশিরভাগটি "বার বাড়াতে" হয় - একটি লাইব্রেরি কতটা ভাল হতে পারে তা দেখার পরেও লোকেরা খুব কমই তাদের অন্যথায় যে ধরণের ড্রেক তৈরি করতে পারে তা লেখার ক্ষেত্রে ফিরে যেতে রাজি হয় না।সত্যিই ভাল কোডারগুলি বেশ কয়েকটি গ্রন্থাগার লেখেন, এটি তখন "আমাদের বাকী" দ্বারা ব্যবহার করা যেতে পারে (সহজেই, তিনি স্বীকার করেন)। এটি সত্যিই এমন একটি ক্ষেত্রে যেখানে "এটি কোনও বাগ নয়, এটি একটি বৈশিষ্ট্য।"

আমি প্রতিটি পয়েন্টটি ক্রমে আঘাত করার চেষ্টা করব না (যা পৃষ্ঠাগুলি নেবে), তবে সরাসরি তার সমাপ্তি বিন্দুতে চলে যান। তিনি বার্জনকে উদ্ধৃত করে বলেছেন: "অব্যবহৃত ভার্চুয়াল ফাংশন সারণী এবং আরটিটিআইয়ের তথ্য অপসারণের জন্য পুরো প্রোগ্রামের অপ্টিমাইজেশন ব্যবহার করা যেতে পারে Such

"এটি একটি সত্যিই কঠিন সমস্যা" এমনকী একটি অসমর্থিত দাবি করে তিনি এটিকে সমালোচনা করেছেন , এমনকি এটিকে থামানো সমস্যার সাথে তুলনা করার চেয়েও অনেক বেশি দূরে। বাস্তবে, এটি ধরণের কিছুই নয় - বাস্তবে, লিঙ্কারটি জোরটেক সি ++ সহ অন্তর্ভুক্ত ছিল ( এমএস-ডস-এর জন্য প্রথম সি ++ সংকলক, 1980 এর দশকে) এটি করেছে did এটি সত্য যে সম্ভাব্য-বহিরাগত তথ্যগুলির প্রতিটি বিট অপসারণ করা হয়েছে তা নিশ্চিত হওয়া শক্ত, তবে এখনও একটি সুন্দর ন্যায্য কাজ করা সম্পূর্ণ যুক্তিসঙ্গত।

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

শেষ পর্যন্ত, এটি সত্য যে লিনাসের মূর্খতাগুলির তুলনায় এই অভিজাতটির কিছুটা বেশি পদার্থ রয়েছে - তবে এটি একেবারে নির্দোষ প্রশংসার সাথে একেবারে জঘন্য আচরণ দিচ্ছে যা এটি প্রাপ্য।


1

একজন সি প্রোগ্রামার হিসাবে যিনি অনিবার্য পরিস্থিতির কারণে সি ++ এ কোড করতে হয়েছিল, আমার অভিজ্ঞতা এখানে। আমি ব্যবহার করি এমন খুব কম জিনিস রয়েছে যা হ'ল সি ++ এবং বেশিরভাগ সি'কে লেগে থাকে মূল কারণ হ'ল আমি সি ++ সব ভাল বুঝতে পারি না। আমার কাছে সি ++ এর জটিলতা এবং এতে কীভাবে ভাল কোড লিখতে হবে তা দেখানোর জন্য আমার কোনও পরামর্শদাতা নেই / নেই। এবং খুব খুব ভাল সি ++ কোডের দিকনির্দেশনা ব্যতীত সি ++ এ ভাল কোডটি লেখা চূড়ান্ত। আইএমএইচও এটি সি ++ এর সবচেয়ে বড় অপূর্ণতা কারণ ভাল সি ++ কোডাররা আরম্ভ করতে সক্ষম হবেন না কেন।

পারফরম্যান্সের বেশ কয়েকটি হিট যা আমি সাধারণত দেখেছি তা এসটিএলের জাদুকরী স্মৃতি বরাদ্দের কারণে (হ্যাঁ, আপনি বরাদ্দকারীকে পরিবর্তন করতে পারেন, কিন্তু সি ++ দিয়ে শুরু করলে কে তা করবে?) আপনি সাধারণত সি ++ বিশেষজ্ঞদের দ্বারা আর্গুমেন্ট শুনেন যা ভেক্টর এবং অ্যারে একইরকম কার্য সম্পাদন করে, কারণ ভেক্টরগুলি অভ্যন্তরীণভাবে অ্যারে ব্যবহার করে এবং বিমূর্তিটি অত্যন্ত দক্ষ efficient আমি ভেক্টর অ্যাক্সেস এবং বিদ্যমান মানগুলি সংশোধন করার জন্য এটি বাস্তবে সত্য বলে মনে করেছি। তবে নতুন এন্ট্রি যুক্ত, ভেক্টর নির্মাণ এবং ধ্বংসের জন্য সত্য নয়। জিআরপিএফ দেখিয়েছে যে কোনও অ্যাপ্লিকেশনটির জন্য মোট 25% সময় ভেক্টর কনস্ট্রাক্টর, ডেস্ট্রাক্টর, মেমমোভ (নতুন উপাদান যুক্ত করার জন্য পুরো ভেক্টর স্থানান্তরের জন্য) এবং অন্যান্য ওভারলোডেড ভেক্টর অপারেটরগুলিতে (যেমন ++) ব্যয় করা হয়েছিল।

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


0

যদিও আমি লিনাস থরভাল্ডস পছন্দ করি, তবে এই অভিজাতটি পদার্থবিহীন - কেবল একটি রেন্ট।

যদি আপনি কোনও দৃ ra় রেন্ট দেখতে চান তবে এখানে একটি: "সি ++ পরিবেশের জন্য খারাপ কেন, বিশ্ব উষ্ণায়নের কারণ এবং কুকুরছানা মারা যায়" http://chaosradio.ccc.de/camp2007_m4v_1951.html অতিরিক্ত উপাদান: http: // www .fefe.de / C ++ /

একটি বিনোদনমূলক কথা, imho


0

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

- ইন্টারফেস পুনরায় ব্যবহার করতে হবে, বাস্তবায়ন নয়

উত্তরাধিকারের উপর একত্রিতকরণ অগ্রাধিকার

- সদস্য পদ্ধতিতে যেখানে সম্ভব বিনামূল্যে ফাংশন পছন্দ করুন

- আপনার কোডটি দৃ exception়ভাবে ব্যতিক্রম নিরাপদ করতে সর্বদা RAII আইডিয়াম ব্যবহার করুন। ধরা চেষ্টা এড়ানো।

স্মার্ট পয়েন্টার ব্যবহার করুন, উলঙ্গ (অজানা) পয়েন্টারগুলি এড়িয়ে চলুন

- শব্দার্থবিজ্ঞানের রেফারেন্সে মান শব্দার্থকে অগ্রাধিকার দিন

- চাকা পুনরায় উদ্ভাবন করবেন না, স্টাইল এবং বুস্ট ব্যবহার করুন

- প্রাইভেট এবং / অথবা একটি সংকলক ফায়ারওয়াল সরবরাহ করতে পিম্পল আইডিয়মটি ব্যবহার করুন


-6

কোনও ;ক্লাস ঘোষণার শেষে চূড়ান্ত না রাখা , কমপক্ষে ভিসির কয়েকটি সংস্করণে।


4
এটি সম্ভবত নবজাতকদের জন্য খুব সাধারণ ভুল (যেমন এখনও কেউ বেসিক সিনট্যাক্স শিখার জন্য প্রায় কিছুই), তবে এমন কি অনেকে আছেন যারা নিজেকে যোগ্য বলে অভিহিত করবেন এবং এখনও এই ভুলটিকে লক্ষণীয় বলে মনে করেন?
ফ্রেড নুরক

1
এটি লিখেছিলেন কেবল কারণ সংকলক আপনাকে একটি ত্রুটি দিয়েছে যা সেমিকোলনের অভাবের সাথে কিছুই করার ছিল না।
মার্কো মুস্তাপিক

2
হ্যাঁ, ঠিক একই ত্রুটিটি আপনি সি সংকলক থেকে পেয়েছেন।
মিরসিয়া চিরিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.