দৃ const়তা সম্পর্কে আমাকে বিক্রয়


133

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

  1. মনে হচ্ছে প্রতিবারই আমি কোনও কিছুকে কনস্ট হিসাবে চিহ্নিত করি, আমি একটি ত্রুটি পেয়েছি এবং কোথাও কনস্ট হওয়ার জন্য অন্য কোনও ফাংশন পরিবর্তন করতে হবে। তারপরে এটি অন্য কোথাও আমাকে অন্য একটি ফাংশন পরিবর্তন করতে বাধ্য করে । এটি কি এমন কিছু যা অভিজ্ঞতার সাথে সহজ হয়ে যায়?

  2. কনস্টের ব্যবহারের সুবিধাগুলি কি সমস্যার জন্য ক্ষতিপূরণ দেওয়ার পক্ষে যথেষ্ট? যদি আপনি কোনও বিষয়বস্তু পরিবর্তন করতে চান না, তবে কেন কেবল এমন কোড লিখবেন না যা এটি পরিবর্তন করে না?

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


1
8 বছরের পুরানো পূর্ববর্তী, তবে .. আপনার কোড 100x (এই লাইভটি দেখেছেন) কীভাবে দ্রুত করা যায়?
লোরো

1
এখানে আমার উত্তর পরীক্ষা করুন (সংশ্লিষ্ট প্রশ্ন, আমি একই উত্তর বলতে চাই): stackoverflow.com/questions/42310477/... BTW: আমি প্রেম নাconst
Gines, Hidalgo,

উত্তর:


158

এটি "কনস্ট সংশোধন" সম্পর্কিত চূড়ান্ত নিবন্ধ: https://isocpp.org/wiki/faq/const-cor درستness ।

সংক্ষেপে, কনস্ট ব্যবহার করা ভাল অনুশীলন কারণ ...

  1. এটি দুর্ঘটনাক্রমে পরিবর্তনশীলগুলি পরিবর্তন করা থেকে রক্ষা করে যেগুলি পরিবর্তন করা উচিত নয়,
  2. এটি আপনাকে দুর্ঘটনাজনিত পরিবর্তনশীল অ্যাসাইনমেন্ট থেকে রক্ষা করে এবং
  3. সংকলক এটি অপ্টিমাইজ করতে পারে। উদাহরণস্বরূপ, আপনি এ থেকে সুরক্ষিত

    if( x = y ) // whoops, meant if( x == y )

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

আপনি সঠিক যে কনস্ট্যান্ট-নির্ভুলতা ধারাবাহিকভাবে ব্যবহার করা কঠিন হতে পারে তবে শেষের কোডটি আরও সংক্ষিপ্ত এবং প্রোগ্রাম সহ নিরাপদ। আপনি যখন প্রচুর সি ++ বিকাশ করেন তখন এর উপকারগুলি দ্রুত প্রকাশিত হয়।


আমি সর্বদা ধরে নিয়েছিলাম যে দৃ const় মানগুলি অবাধে ক্যাশে করা যায় এবং এইভাবে অনেকগুলি সমঝোতা সমস্যা এড়ানো বা গতি উন্নত করা যায়। এটা কি সত্যি?
ফিল এইচ

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

4
সি ++ 11 হিসাবে স্ট্যান্ডার্ড লাইব্রেরিটি constথ্রেড-সেফ বলতে বোঝায় এবং আপনার নিজের কোডকে এভাবে চিকিত্সা করা সম্ভব মাল্টি-থ্রেডিং সমস্যার জন্য চেক করা সহজ করে তোলে এবং আপনার এপিআই ব্যবহারকারীদের জন্য এপিআই গ্যারান্টি সরবরাহ করার একটি সহজ উপায়।
বিকেল 25:44

3
আমার জন্য, কনস্টের সঠিকতার সবচেয়ে বড় মূল্য সংযোজন হ'ল আপনি কেবল ফাংশন প্রোটোটাইপগুলি দেখে জানেন যে পয়েন্টারগুলি কখনই ফাংশনটির দ্বারা রূপান্তরিত হয় না এমন ডেটা উল্লেখ করে (কেবলমাত্র ইনপুট)।
cp.engr

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

128

এখানে একটি সাধারণ ত্রুটিযুক্ত কোডের একটি অংশ যা সঠিকতা আপনাকে রক্ষা করতে পারে:

void foo(const int DEFCON)
{
   if (DEFCON = 1)     //< FLAGGED AS COMPILER ERROR! WORLD SAVED!
   {
       fire_missiles();
   }
}

19
সুতরাং আমরা বলছি যে কনস্টের প্রয়োজনীয় কারণ কিছু রক্তাক্ত ইডিয়ট সিতে অ্যাসাইনমেন্ট অপারেটর হিসাবে "=" বেছে নিয়েছিল? ;-)
স্টিভ জেসোপ

37
অবশ্যই, বেশিরভাগ আধুনিক সংকলকগণ শর্তসাপেক্ষে অ্যাসাইনমেন্ট সম্পর্কে সতর্ক করে এবং আমরা সকলেই ত্রুটিযুক্ত পতাকা হিসাবে ট্রিট সতর্কতাগুলি চালু করি, ডান: ->
জ্যাক বোল্ডিং ২

7
এই উদাহরণটিতে খুব কঠোর হবেন না: কিছু বিকাশকারীর দ্বারা এটি প্রচার করা একই উদাহরণ যা যদি (i == 0) পরিবর্তে (0 == i) ব্যবহার করতে আমাদের রাজি করায়। শেষ অবধি, ডগের কোডের প্যাটার্নটি "যদি" বিবৃতিটির বাইরে ব্যবহার করা যায়। গুরুত্বপূর্ণটি হ'ল এটি একটি হাস্যকর উপায়ে কনস্টের অন্যতম সুবিধা দেখায়। + 1.
প্যারাসেবল

2
কিছু সংকলক (এবং লিঙ্কস) দীর্ঘদিন ধরে এ সম্পর্কে সতর্ক করে আসছেন, এবং কনস্ট : কোডেপ্যাড.অর্গ / এনএনএফ 5 জেএক্সভি-র চেয়ে এই টাইপটি ধরতে আরও বেশি কার্যকর

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

62

মনে হচ্ছে প্রতিবারই আমি কোনও কিছুকে কনস্ট হিসাবে চিহ্নিত করি, আমি একটি ত্রুটি পেয়েছি এবং কোথাও কনস্ট হওয়ার জন্য অন্য কোনও ফাংশন পরিবর্তন করতে হবে। তারপরে এটি অন্য কোথাও আমাকে অন্য একটি ফাংশন পরিবর্তন করতে বাধ্য করে। এটি কি এমন কিছু যা অভিজ্ঞতার সাথে সহজ হয়ে যায়?

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


7
এটি আমাকে এতগুলি বাগ প্রতিরোধ করতে সহায়তা করেছে যেখানে আমার কোনও কনস্ট্যান্ট ফাংশন কল করার বিষয়ে কনস্ট ফাংশন ছিল কারণ আমি ভুলে গিয়েছি যে এটি নীচের ডেটা পরিবর্তন করে।
মাকিং হাঁস

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

3
এটি আমার অভিজ্ঞতায় সম্পূর্ণ ভুল। নেস্টেড পয়েন্টের ধরণগুলি এই ধরণের জিনিসটির জন্য সবচেয়ে বড় মাথাব্যথা তৈরি করে, যেখানে আপনার একক ধরণের একাধিক কনস্ট-কোয়ান্টিফায়ার থাকতে পারে।
নলডোরিন

4
"আপনি যদি শুরু থেকেই কনস্ট-সঠিকটি ডিজাইন করেন," আসলে আপনি কতবার শুরু থেকেই কনস্ট-সঠিকতা জোর করার বিলাসিতা করেছেন ?? আমাদের বেশিরভাগকেই প্রতিদিনের বেসগুলিতে অসংখ্য এপিআই এবং লাইব্রেরি নিয়ে কাজ করতে হয় যেখানে এটি না হয় এবং এগুলি সম্পর্কে আপনি খুব কমই করতে পারেন। তাই আমি ওপিএসের অনুভূতির সাথে একমত "" প্রতিবারই যখন আমি কোনও
কিছুকে কনস্ট

@ ওয়ারেনডিউ এটি একটি পরিবর্তনশীল যুক্তি; যদি মূল লেখকরা constসঠিকভাবে ব্যবহার করে (যেমন "শুরু থেকেই") তবে অবশ্যই সমস্যা হবে না, যা হ'ল মূল বিষয়!
অরবিটে

31

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


1
এটি একমাত্র সত্য। ইন্টারফেস ইত্যাদির মাধ্যমে ইন-ভেরিয়েবলগুলি প্রয়োগের জন্য কনটকে সুরক্ষা হিসাবে ব্যবহার করা হয়।
জর্দান পারমার

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

2
যথাযথভাবে। "কনট ইনট মান = 5;" থাকা ভাল; "int কনস্টভ্যালু = 5;" এর চেয়ে বেশি। +1 টি।
প্যারাসেবল

6
কনস্ট-নির্ভুলতা স্থাপনের সঠিক সময়টি আপনি যখন প্রাথমিকভাবে API লিখেন write অন্যথায় আপনি কনস্ট-পয়জনিং নিয়ে সমস্যায় পড়ে যাবেন যখন আপনি এটি পুনঃনির্মাণ করেন (এজন্য এটি পুরানো কোডে যুক্ত করা একেবারেই নতুন কোডে করা একেবারেই আলাদা বিষয় )।
ডোনাল ফেলো

@ ডোনালফেলো এটি পরে বলার অপেক্ষা রাখে না। এটি বলছে যে আপনি পরে সুবিধাগুলি পাবেন , যখন আপনি ইতিমধ্যে উপস্থিত
কনস্টের

27

আপনি যদি দৃ const়ভাবে কন্স ব্যবহার করেন, আপনি অবাক হবেন যে বেশিরভাগ ফাংশনে কতগুলি বাস্তব ভেরিয়েবল রয়েছে। প্রায়শই লুপের কাউন্টার ছাড়াই বেশি। যদি আপনার কোডটি এই পর্যায়ে পৌঁছে যায় তবে আপনি ভিতরে একটি উত্তাপ অনুভূতি পাবেন ... সংকলন দ্বারা বৈধতা ... ফাংশনাল প্রোগ্রামিংয়ের ক্ষেত্রটি কাছাকাছি ... আপনি এখন এটি প্রায় স্পর্শ করতে পারেন ...


1
যেহেতু সি ++ 17 এবং কনসেক্সট্রাক্স সচ্ছলতা আমি লিখছি কমপাইল টাইম ইউনিট পরীক্ষাগুলি ... আরও কাছাকাছি
আসছি

22

কনস্ট একটি প্রতিশ্রুতি যা আপনি বিকাশকারী হিসাবে করছেন এবং প্রয়োগের ক্ষেত্রে সংকলকের সাহায্যের তালিকা করছেন।

সংশোধন হওয়ার জন্য আমার কারণগুলি:

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

20

আমার দর্শনটি হ'ল আপনি যদি কমপ্লাই টাইম চেক সহ কোনও নিট-পিক ভাষা ব্যবহার করতে পারেন তবে এটির সর্বোত্তম ব্যবহারের তুলনায় আপনি পারেন। constআপনি যা বলতে চান তা বোঝানোর একটি সংকলক বলপূর্বক উপায় ... এটি মন্তব্য বা ডক্সিঞ্জনের চেয়ে ভাল। আপনি মূল্য পরিশোধ করছেন, কেন মানটি পাবেন না?


20

প্রোগ্রামিং সি ++ কনস্ট্যান্ড ব্যতীত সুরক্ষা বেল্ট না চালিয়ে যাওয়ার মতো।

প্রতিবার গাড়িতে উঠে যাওয়ার সময় সুরক্ষা বেল্ট লাগানো আপনার পক্ষে কষ্টদায়ক এবং 365 দিনের মধ্যে 364 দিনের মধ্যে আপনি নিরাপদে পৌঁছে যাবেন।

পার্থক্যটি হ'ল আপনি যখন নিজের গাড়ি নিয়ে সমস্যায় পড়েন আপনি তা তাৎক্ষণিকভাবে অনুভব করতে পারবেন, তবে বিনা বাধায় প্রোগ্রামিংয়ের সাথে আপনি দু'সপ্তাহ সন্ধান করতে পারেন যা কেবল এই কারণে আবিষ্কার করেছিল যে আপনি অজান্তেই একটি ফাংশন যুক্তিটি গোছিয়ে দিয়েছেন find দক্ষতার জন্য আপনি অ-নিরপেক্ষ রেফারেন্স দিয়ে পাস করেছেন।


18

এম্বেড থাকা প্রোগ্রামিংয়ের জন্য, constবৈশ্বিক ডেটা স্ট্রাকচারগুলি ঘোষণার সময় ন্যায়বিচারের সাথে ব্যবহার করা ধীরে ধীরে ডেটা ROM এ সজ্জিত করে বা বুট করার সময় র‍্যামে অনুলিপি না করে ফ্ল্যাশ করতে পারে RAM

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

বড় প্রকল্পগুলিতে অন্যান্য প্রোগ্রামারদের সাথে কাজ করার সময়, constসঠিকভাবে ব্যবহার করা অন্যান্য প্রোগ্রামারদের আপনাকে থ্রোল্ট করা থেকে বিরত রাখতে সহায়তা করে।


13

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

এছাড়াও, constওভারলোড প্রক্রিয়ার একটি অংশ, যাতে আপনার অভিন্ন স্বাক্ষর সহ দুটি পদ্ধতি থাকতে পারে তবে একটির সাথে constএবং একটি ছাড়াও। যার একটিতে রেফারেন্সের constজন্য বলা হয় const, এবং অন্যটিটিকে অ- constরেফারেন্সের জন্য ডাকা হয় ।

উদাহরণ:

#include <iostream>

class HelloWorld {
    bool hw_called;

public:
    HelloWorld() : hw_called(false) {}

    void hw() const {
        std::cout << "Hello, world! (const)\n";
        // hw_called = true;  <-- not allowed
    }

    void hw() {
        std::cout << "Hello, world! (non-const)\n";
        hw_called = true;
    }
};

int
main()
{
    HelloWorld hw;
    HelloWorld* phw1(&hw);
    HelloWorld const* phw2(&hw);

    hw.hw();    // calls non-const version
    phw1->hw(); // calls non-const version
    phw2->hw(); // calls const version
    return 0;
}

13

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

আমি যে কোডটি লিখি তাতে প্রচুর পরিমাণে চেষ্টা করা মূল্যবান কারণ আমরা রচনাটি প্রচুর পরিমাণে ব্যবহার করার প্রবণতা অর্জন করি:

class A { ... }
class B { A m_a; const A& getA() const { return m_a; } };

যদি আমাদের দৃ const়তা না থাকে, তবে আপনাকে নিশ্চিত করে তুলতে হবে যে আপনার পিছনে পিছনে ক্লাস বি এর অভ্যন্তরীণ পরিস্থিতি কেউ চালিত করছে না বলে আপনাকে মান দিয়ে জটিল বস্তুগুলি ফিরিয়ে নেওয়া উচিত।

সংক্ষেপে, কনস্ট-সঠিকতা নিজেকে রাস্তার ব্যথা থেকে বাঁচানোর জন্য একটি প্রতিরক্ষামূলক প্রোগ্রামিং ব্যবস্থা।


7

বলুন পাইথনে আপনার পরিবর্তনশীল রয়েছে। আপনি জানেন যে আপনি এটি সংশোধন করার কথা নয়। আপনি যদি দুর্ঘটনাক্রমে করেন?

সি ++ আপনাকে দুর্ঘটনাক্রমে এমন কিছু করা থেকে নিজেকে রক্ষা করার একটি উপায় দেয় যা আপনি প্রথম স্থানে করতে সক্ষম হবেন না বলে মনে করা হয়েছিল। প্রযুক্তিগতভাবে আপনি যেকোন উপায়ে এটি পেতে পারেন তবে নিজেকে গুলি করার জন্য আপনাকে অতিরিক্ত কাজ করতে হবে।


4

সেখানে একটা চমৎকার নিবন্ধ এখানে const মধ্যে C ++ সম্পর্কে। এটি একটি দুর্দান্ত সোজা এগিয়ে মতামত তবে আশা করি এটি কিছুটিকে সহায়তা করবে।


3

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

হ্যাঁ, এটি সময়ের সাথে সহজ হয়।


2

তাত্ত্বিকভাবে আমি দৃ const়তা সঠিকতা পছন্দ করি। প্রতিবারের মতো আমি এটি প্রয়োগে কঠোরভাবে প্রয়োগ করার চেষ্টা করেছি এটি শেষ পর্যন্ত ভেঙে গেছে এবং কনস্ট_কাস্ট কোডটিকে কুৎসিত করে তুলতে শুরু করে।

সম্ভবত এটি আমি ব্যবহার করি কেবল ডিজাইনের ধরণ, তবে কনস্ট সবসময় একটি ব্রাশ খুব বেশি প্রশস্ত হয়।

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

সম্ভবত উত্তরটি কনস্ট-নেসের প্রয়োজনীয়তার উপর ভিত্তি করে শ্রেণি বিভক্ত করা হবে, তবে এটি যে উপকারটি নিয়ে আসে তার চেয়ে আমি নকশাকে আরও জটিল করতে চাই।


আমি মনে করি যে আপনার উদাহরণটি অতিরিক্ত ব্যবহারের কনস্টের একটি মামলা, তবে কনটেস্ট-নেসটি অপসারণের জন্য উদাহরণ পরিবর্তনকারীগুলিতে প্রয়োগ করা যেতে পারে এমন মিউটিভেবল মডিফায়ার সম্পর্কে ভুলবেন না।
চিড়িয়াখানা

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

আমি অন্য একটি ক্লাস যুক্ত করতে পারি, তবে কনস্ট-যথার্থতার জন্য আমি অযৌক্তিকভাবে এপিআইটিকে জটিল করতে চাই না।
রব ওয়াকার

1

নিম্নলিখিত কোড অনুসারে আপনি কমপ্লেক্স সহ সংকলক ইঙ্গিতও দিতে পারেন ....

#include <string>

void f(const std::string& s)
{

}
void x( std::string& x)
{
}
void main()
{
    f("blah");
    x("blah");   // won't compile...
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.