මෙය බොහෝ දුරට දෙවන පේළියට ආමන්ත්රණය කරයි: හොඳම භාවිතයන්, පැවරුම්, ක්රියාකාරී පරාමිතීන් යනාදිය.
සාමාන්ය පුහුණුව. const
ඔබට හැකි සෑම දෙයක්ම කිරීමට උත්සාහ කරන්න . නැතහොත් එය වෙනත් ආකාරයකින් තැබීමට, සෑම දෙයක්ම const
ආරම්භ කිරීමට සලස්වන්න , ඉන්පසු අවම කට්ටලය හරියටම ඉවත් කරන්නconst
වැඩසටහන ක්රියාත්මක වීමට ඉඩ දීම සඳහා අවශ්ය . නිරවද්යතාවය සාක්ෂාත් කර ගැනීම සඳහා මෙය විශාල උපකාරයක් වනු ඇති අතර, මිනිසුන් වෙනස් කිරීමට බලාපොරොත්තු නොවන දේට උත්සාහ කර ඒවා පැවරූ විට සියුම් දෝෂ හඳුන්වා නොදෙන බවට සහතික වනු ඇත.
වසංගතය මෙන් const_cast <> වළකින්න. ඒ සඳහා නීත්යානුකූල භාවිත අවස්ථා එකක් හෝ දෙකක් තිබේ, නමුත් ඒවා ඉතා අල්පය. ඔබ const
වස්තුවක් වෙනස් කිරීමට උත්සාහ කරන්නේ නම් , එය ප්රකාශයට පත් කළ අය සොයා ගැනීමට ඔබ බොහෝ දේ කරනු ඇතconst
පළමුවරට සිදුවිය යුතු දේ පිළිබඳව සම්මුතියකට එළඹීම සඳහා ඔවුන් සමඟ කාරණය කතා කිරීමටත් ඇත.
එය ඉතා පිළිවෙලට පැවරුම් කරා යොමු කරයි. ඔබට යමක් පැවරිය හැක්කේ එය නොනවතින නම් පමණි. ඔබට නියත දෙයක් වෙත පැවරීමට අවශ්ය නම්, ඉහත බලන්න. ප්රකාශනවල int const *foo;
සහ int * const bar;
වෙනස් දේවල ඇති බව මතක තබා ගන්න const
- මෙහි ඇති වෙනත් පිළිතුරු මගින් එම ප්රශ්නය ප්රශංසනීය ලෙස ආවරණය කර ඇති බැවින් මම එයට නොයන්නෙමි.
ක්රියාකාරී පරාමිතීන්:
වටිනාකම අනුව ගමන් කරන්න: උදා: void func(int param)
ඇමතුම් අඩවියේ ඔබ එක් ආකාරයකින් හෝ වෙනත් ආකාරයකින් ගණන් ගන්නේ නැත. ශ්රිතය ලෙස ප්රකාශ කිරීම සඳහා භාවිත අවස්ථා ඇති බවට තර්කය ඉදිරිපත් කළ හැකියvoid func(int const param)
නමුත් එය ඇමතුම්කරුට කිසිදු බලපෑමක් ඇති නොකරන , එය ශ්රිතය මත පමණක් වන අතර, එමඟින් සම්මත වූ ඕනෑම අගයක් ඇමතුම අතරතුර ශ්රිතය මගින් වෙනස් කළ නොහැක.
යොමුව අනුව ගමන් කරන්න: උදා: void func(int ¶m)
දැන් එය වෙනසක් ඇති කරයි. දැන් ප්රකාශයට පත් කර func
ඇති පරිදි වෙනස් කිරීමට ඉඩ දී ඇති අතර param
, ඕනෑම ඇමතුම් අඩවියක් ප්රතිවිපාක සමඟ කටයුතු කිරීමට සූදානම් විය යුතුය. void func(int const ¶m)
කොන්ත්රාත්තුව වෙනස් කිරීම සඳහා ප්රකාශය වෙනස් කිරීම සහ func
දැන් වෙනස් කළ නොහැකි සහතික param
, එනම් සම්මත වී ඇති දෙය නැවත එළියට එනු ඇත. අනෙක් අය සඳහන් කර ඇති පරිදි ඔබට වෙනස් කිරීමට අවශ්ය නොවන විශාල වස්තුවක් ලාභදායි ලෙස සම්මත කිරීම සඳහා මෙය ඉතා ප්රයෝජනවත් වේ. විශාල වස්තුවක් වටිනාකමින් සම්මත කිරීමට වඩා යොමු කිරීමක් සම්මත කිරීම බෙහෙවින් ලාභදායී වේ.
පොයින්ටර් සාමාර්ථයක්: උදා: void func(int *param)
හා void func(int const *param)
මේ දෙක දැන් නම් උත්සවය සඳහා පරීක්ෂා කිරීමට අවශ්ය බව වරනයක් සමග, ඔවුන්ගේ යොමු සගයන් සමග එච්චරමයි ඒකාන්ව nullptr
සමහර අනෙකුත් ගිවිසුම්ගත වගකීමක් බව තහවුරු මිස func
එය කවදාවත් ලැබෙන බව nullptr
තුළ param
.
එම මාතෘකාව පිළිබඳ මතය කොටස. මෙවැනි අවස්ථාවක නිවැරදි බව ඔප්පු කිරීම අසරණ දුෂ්කර ය, වැරැද්දක් කිරීම ඉතා පහසු ය. එබැවින් අවස්ථා ගන්න එපා, සෑම විටම දර්ශක පරාමිතීන් පරීක්ෂා කරන්න nullptr
. ඔබ වේදනාව හා දුක් වේදනා වලින් බේරෙනු ඇති අතර දිගු කාලීනව දෝෂ සොයා ගැනීමට අපහසු වනු ඇත. චෙක්පතේ පිරිවැය සම්බන්ධයෙන් ගත් කල, එය අපිරිසිදු ය. සම්පාදකයා තුළ ස්ථිතික විශ්ලේෂණය මඟින් එය කළමනාකරණය කළ හැකි අවස්ථාවන්හිදී, ප්රශස්තකරණය කෙසේ හෝ එය මඟ හරිනු ඇත. MSVC සඳහා සබැඳි කාල කේත උත්පාදනය හෝ GCC සඳහා WOPR (මම හිතන්නේ) සක්රිය කරන්න, එවිට ඔබට එය පුළුල් ලෙස වැඩසටහනක් ලැබෙනු ඇත, එනම් ප්රභව කේත මොඩියුල සීමාව ඉක්මවා යන ක්රියාකාරී ඇමතුම් වලදී පවා.
දවස අවසානයේදී ඉහත කරුණු සියල්ලම සෑම විටම දර්ශකයන්ට යොමු වීමට වැඩි කැමැත්තක් දක්වයි. ඒවා සෑම තැනකම ආරක්ෂිතයි.