"পুরো দল" সি ++ বৈশিষ্ট্যগুলি?


16

সি ++ এ, ব্যতিক্রমগুলির মতো বৈশিষ্ট্যগুলি আপনার পুরো প্রোগ্রামকে প্রভাবিত করে: আপনি হয় এটি আপনার পুরো প্রোগ্রামে অক্ষম করতে পারেন , বা আপনার কোড জুড়ে আপনাকে সেগুলি মোকাবেলা করতে হবে। সি ++ রিপোর্টে একটি বিখ্যাত নিবন্ধ হিসাবে এটি রাখে:

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

যেহেতু এমনকি newব্যতিক্রম ছুঁড়ে ফেলেছে , প্রতিটি ফাংশনকে বেসিক ব্যতিক্রমী সুরক্ষা সরবরাহ করা দরকার - যদি না এটি কেবলমাত্র এমন ফাংশনগুলিকে কল করে যা কোনও ব্যতিক্রম ছোঁড়ার নিশ্চয়তা দেয় না - যদি না আপনি আপনার সম্পূর্ণ প্রকল্পে ব্যতিক্রম সম্পূর্ণভাবে অক্ষম করেন

সুতরাং, ব্যতিক্রমগুলি একটি "পুরো-প্রোগ্রাম" বা "সম্পূর্ণ দল" বৈশিষ্ট্য, যেহেতু তাদের অবশ্যই এটি ব্যবহার করে একটি দলের প্রত্যেককে বুঝতে হবে। তবে যতটা আমি জানি সমস্ত সি ++ বৈশিষ্ট্যগুলি এর মতো নয়।

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

অন্য কোন সি ++ বৈশিষ্ট্য রয়েছে যা ইমপ্যাক্ট কোডগুলি সরাসরি তাদের ব্যবহার না করে এবং তাই "পুরো দল"? আমি বিশেষত সিটিতে উপস্থিত বৈশিষ্ট্যগুলিতে আগ্রহী am

আপডেট : আমি বিশেষত এমন বৈশিষ্ট্যগুলি সন্ধান করছি যেখানে কোনও ভাষা-প্রয়োগকৃত চিহ্ন নেই যেখানে তাদের সম্পর্কে সচেতন হওয়া দরকার। প্রথম উত্তরটি আমি কনস্ট-নির্ভুলতার উল্লেখ করেছি, যা সম্পূর্ণ দল, সুতরাং প্রত্যেককে এটি সম্পর্কে শিখতে হবে; তবে এএএএএফসি এটি কেবল তখনই প্রভাব ফেলবে যখন আপনি চিহ্নিত ফাংশনটি কল করেছেন এবং সংকলকটি আপনাকে constঅ-কনস্ট্যান্ট অবজেক্টগুলিতে কল করা থেকে বিরত করবে, তাই আপনি গুগলে কিছু পেতে পারেন। ব্যতিক্রম সহ, আপনি এমনকি এটি পান না; তদ্ব্যতীত, আপনি ব্যবহার করার সাথে সাথে এগুলি সর্বদা ব্যবহার করা হয় new, তাই ব্যতিক্রমগুলি আরও "कपटी"। যেহেতু আমি এটিকে উদ্দেশ্যমূলকভাবে বলতে পারি না, যদিও আমি পুরো টিমের কোনও বৈশিষ্ট্যের প্রশংসা করব।

আপডেট 2 : সি ++ বৈশিষ্ট্যটির পরিবর্তে আমার "সি ++ - নির্দিষ্ট বৈশিষ্ট্য" এর মতো কিছু লেখা উচিত ছিল, মাল্টিথ্রেডিংয়ের মতো জিনিসগুলি বাদ দিতে যা প্রচুর পরিমাণে মূলধারার প্রোগ্রামিং ভাষার ক্ষেত্রে প্রযোজ্য।

পরিশিষ্ট: কেন এই প্রশ্নটি উদ্দেশ্যমূলক (যদি আপনি অবাক হন)

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

উপরে, পরিবর্তে, আমি একটি "সম্পূর্ণ দল" ভাষার বৈশিষ্ট্যটি কী (সংক্ষিপ্তভাবে সম্ভব হিসাবে সংজ্ঞায়িত করেছি), সি ++ সম্পর্কে সাহিত্যে বিস্তৃত সহায়ক প্রমাণ সহ এক উদাহরণ (ব্যতিক্রম) সরবরাহ করি এবং সি ++ এ পুরো দলের বৈশিষ্ট্য জিজ্ঞাসা করি ব্যতিক্রম অতিক্রম।

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

উত্তর:


11

আমি সম্মতি একটি 'পুরো দল' বৈশিষ্ট্য হিসাবে মনোনীত করব।

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


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

@ ব্লায়সারব্ল্যাড - সি ++ 11 এটি নিজস্ব থ্রেডিং গ্রন্থাগার চালু করেছে, তাই হ্যাঁ, এটি এখন সি ++ এর অংশ।
মাইকেল কোহেন

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

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

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

10

সুস্পষ্ট উত্তর হ'ল সংক্ষিপ্তকরণ const: যেহেতু const/ volatileযোগ্যতা সংক্রামক, কোডের একটি অংশ একবার এটি ব্যবহার করা শুরু করলে প্রত্যেক (প্রত্যক্ষ বা পরোক্ষভাবে) কলিং কোডটিও অবশ্যই constসঠিক হওয়া উচিত , বা constস্পষ্টতই নেস ফেলে দেওয়া উচিত ।

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


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

10

পয়েন্টার।

  • পয়েন্টারটি স্ট্যাকের স্মৃতিতে নির্দেশ করে?
  • পয়েন্টারটি হিমে স্মৃতিতে নির্দেশ করে?
  • পয়েন্টারটি কি কোনও একক বস্তুতে নির্দেশ করে?
  • পয়েন্টার একটি অ্যারে নির্দেশ করে?
  • পয়েন্টারটি একটি অ্যারের মাঝখানে কোনও অবস্থানকে নির্দেশ করে?
  • পয়েন্টারটি বৈধ?
  • পয়েন্টারটি কি ম্যাঙ্গেলড?
  • কোন কোডটি পয়েন্টারটির "মালিক"?
  • রেফারেন্স করা অবজেক্টটি ম্যানুয়ালি বিলোপ করা উচিত? যদি তাই হয়, কিভাবে?

1
পয়েন্টার মালিকানা সম্পর্কে প্রশ্নের কারণে বিশেষত +1। স্মার্ট পয়েন্টার ছাড়া মালিকানা সত্যই পুরো টিম জুড়ে প্রচার করে।
জে.কোর

3

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


1

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

std::ostream& operator<< (std::ostream&, MyClass const&) {...}
std::istream& operator>> (std::istream&, MyClass&) {...}

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

আপনার শ্রেণি শ্রেণিবিন্যাসের গভীরতার কোনও সদস্য কি এটি string? আশ্চর্য, ক্লায়েন্ট ভাল একটি পাঠায় একক শব্দ, বা অন্য। আপনি ক্রমিক করতে চান কিছু নম্বর আছে? আপনি প্রতিটি ফাংশন কল গভীরতায় স্ট্রিমের পতাকাগুলি আরও ভাল করে পরীক্ষা করুন, সংরক্ষণ করুন এবং পুনরুদ্ধার করুন , কারণ আপনি কখনই জানেন না যে আপনার ফাংশনটি কল করার আগে তার স্ট্রিমটি কেবল অক্টাল আউটপুটে সেট করেছে id বা তার থেকেও খারাপ - কে মাত্র এরকম কিছু বলা setfillএবং setwএবং এইভাবে আপনার প্রথম -আর বিন্যাস ইনপুট / আউটপুট কপর্দকশূন্য শুধুমাত্র আপনার first- অবিচ্ছেদ্য সদস্যদের কারণ যারা রাজ্যের সঞ্চারিত না । ওহ এবং স্ট্রিম এবং আন্তর্জাতিকীকরণ সম্পর্কে জিজ্ঞাসা করা যাক না।

আপনি যে সঠিক উপায়ে, বা ভুল উপায়ে স্ট্রিম করছেন বা এমনকি মোটেও স্ট্রিমিং করছেন তাতে ভাষাতে কোনও সতর্কতা নেই । কোনও স্ট্রিমের কাছে ক্লায়েন্ট কোড জিজ্ঞাসা করে ডেটা ব্যাকআপ লিখতে? আপনার কাছে সত্যিই জানার উপায় নেই যা স্ট্রিমটি নির্দেশ করে /dev/null। ( অন্যদিকে, আপনি যেভাবে অবিশ্বাস্য ব্যাকআপ গতি এবং সংক্ষেপণ হার দাবি করতে পারেন ! )

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