একটি ফাংশন হিসাবে চিহ্নিত করে constexpr
এটিকে একটি ইনলাইন ফাংশনও করে তোলে § [dcl.constexpr] / 1:
কনস্টেক্সপ্রাইফ স্পেসিফায়ারের সাথে ঘোষিত একটি ফাংশন বা স্থিতিশীল ডেটা সদস্য স্পষ্টতই একটি ইনলাইন ফাংশন বা পরিবর্তনশীল (.1.১..1)।
inline
পরিবর্তে, এর অর্থ হল আপনার ব্যবহৃত প্রতিটি অনুবাদ ইউনিটে সেই ফাংশনের সংজ্ঞা অন্তর্ভুক্ত করা দরকার। মূলত এর অর্থ constexpr
ফাংশনগুলি হ'ল :
- একটি অনুবাদ ইউনিটে ব্যবহারের মধ্যে সীমাবদ্ধ, বা
- একটি শিরোনামে সংজ্ঞায়িত।
সর্বাধিক সাধারণ ফাংশন যা আপনি একটি শিরোনামে ঘোষণা করতে চান এবং উত্স ফাইলে সংজ্ঞায়িত করতে চান (এবং এগুলি ব্যবহার করে এমন কিছু যা কেবল শিরোনামকে অন্তর্ভুক্ত করে, তারপরে উত্সটির অবজেক্ট ফাইলের সাথে লিঙ্ক করে) constexpr
কেবল কার্যকর হবে না।
তত্ত্ব অনুসারে, আমি মনে করি আপনি কেবল সমস্ত কিছু শিরোনামে সরাতে পারেন এবং কেবলমাত্র একটি উত্স ফাইল রয়েছে যা কেবলমাত্র সমস্ত শিরোলেখকে অন্তর্ভুক্ত করে তবে এটি সঙ্কলনের সময়টিকে মারাত্মকভাবে ক্ষতিগ্রস্থ করবে এবং বেশিরভাগ গুরুতর প্রকল্পগুলির জন্য সংকলনের জন্য প্রচুর পরিমাণে মেমরির প্রয়োজন হবে।
একটি constexpr
ফাংশন কিছু উপায়েও সীমাবদ্ধ, তাই কিছু ফাংশনগুলির জন্য এটি কোনও বিকল্প নয়। বিধিনিষেধগুলির মধ্যে রয়েছে:
- ভার্চুয়াল ফাংশন হতে পারে না
constexpr
।
- এর রিটার্ন টাইপ অবশ্যই একটি 'আক্ষরিক প্রকার' হতে হবে (উদাঃ, অ ত্রিভোজী কর্টর বা ডিটারগুলি সহ কোনও বস্তু নয়)।
- এর সমস্ত পরামিতি অবশ্যই আক্ষরিক ধরণের হওয়া উচিত।
- ফাংশন বডি একটি
try
ব্লক থাকতে পারে না ।
- এটিতে অক্ষরহীন প্রকারের একটি চলক সংজ্ঞা বা স্থির বা থ্রেড স্টোরেজ সময়কাল সহ কোনও কিছুই থাকতে পারে না।
আমি দু'জনকে বরং অস্পষ্ট জিনিস এড়িয়ে গিয়েছি (উদাহরণস্বরূপ, এটিতে একটি goto
বা একটি asm
বিবৃতিও থাকতে পারে না ) তবে আপনি ধারণাটি পেয়ে যান - বেশ কয়েকটি জিনিসের জন্য এটি কার্যকর হবে না।
নীচের লাইন: হ্যাঁ, বেশ কয়েকটি পরিস্থিতি রয়েছে যেখানে এটি একটি খারাপ ধারণা।