ক্রোনো :: মাস এবং ক্রোনো :: মাসের মধ্যে পার্থক্য কী?


উত্তর:


129

হ্যাঁ, এই লাইব্রেরির মুখোমুখি হওয়ার সময় monthএবং উভয়ই থাকা বিভ্রান্তিকর হতে পারে months। তবে এই বিভ্রান্তি কমাতে সহায়তার জন্য এই লাইব্রেরিতে নিয়মিত নামকরণের সম্মেলন রয়েছে। সংক্ষিপ্ত স্বজ্ঞাত নামগুলি বজায় রেখে সুবিধাটি স্বতন্ত্র শব্দার্থবিজ্ঞানের স্পষ্ট বিভাজন রয়েছে।

months

সমস্ত "পূর্বনির্ধারিত" chrono::durationপ্রকারগুলি বহুবচন:

  • nanoseconds
  • microseconds
  • milliseconds
  • seconds
  • minutes
  • hours
  • days
  • weeks
  • months
  • years

সুতরাং monthsএক chrono::durationপ্রকার :

মাস = সময়কাল < কমপক্ষে 20 বিটের স্বাক্ষরিত পূর্ণসংখ্যার প্রকার ,
                         অনুপাত_ বিভাজন <বছর :: সময়কাল, অনুপাত <12> >>;

এবং এটা ঠিক 1 / 12 এর years

static_assert(12*months{1} == years{1});

আপনি এটি এর মতো মুদ্রণ করতে পারেন:

cout << months{7} << '\n';

এবং আউটপুটটি হ'ল:

7[2629746]s

এটি 2,629,746 এর 7 টি ইউনিট হিসাবে পড়ে। দেখা গেছে যে নাগরিক ক্যালেন্ডারে 2,629,746 সেকেন্ড মাসের গড় দৈর্ঘ্য। পৃথকভাবে স্থিত:

static_assert(months{1} == 2'629'746s);

(বার সংখ্যা বাজানো বাদে সঠিক সংখ্যাটি বিশেষ গুরুত্বপূর্ণ নয়)

month

month(একবচন) অন্যদিকে চালু থাকে না একটি chrono::duration। এটি সিভিল ক্যালেন্ডারে বছরের এক মাসের জন্য একটি ক্যালেন্ডারিক স্পেসিফায়ার । বা:

static_assert(month{7} == July);

এটি এর মতো একটি তারিখ গঠনের জন্য ব্যবহার করা যেতে পারে:

auto independence_day = month{7}/4d/2020y;

বীজগণিত monthএবং monthsএই বিভিন্ন শব্দার্থ প্রতিবিম্ব। উদাহরণস্বরূপ "জুলাই + জুলাই" নির্বিকার এবং এইভাবে একটি সংকলন-সময় ত্রুটি:

auto x = month{7} + month{7};
         ~~~~~~~~ ^ ~~~~~~~~
error: invalid operands to binary expression ('std::chrono::month' and 'std::chrono::month')

তবে এটি সঠিক ধারণা দেয়:

auto constexpr x = month{7} + months{7};
static_assert(x == February);

এবং এই:

auto constexpr x = months{7} + months{7};
static_assert(x == months{14});

এবং এখনো:

auto b = February == months{14};
         ~~~~~~~~ ^  ~~~~~~~~~~
error: invalid operands to binary expression ('const std::chrono::month' and 'std::chrono::months')

উদাহরণস্বরূপ monthএবং monthsকেবলমাত্র সমান নয়, তারা তুলনামূলকও নয়। এগুলি আপেল এবং কমলা, যদি আপনি ফলের উপমাতে থাকেন into ;-)

dayএবং এর মধ্যে একই রকম সম্পর্ক রয়েছে days। এবং মধ্যে yearএবং years


যদি এটি বহুবচন হয় তবে এটি ক chrono::duration


এবং <chrono>এই দুটি শব্দার্থগতভাবে স্বতন্ত্র এবং তবুও অনুরূপ ধারণাগুলি আপনার কোডটিতে একে অপরের সাথে বিভ্রান্ত না হয় তা নিশ্চিত করতে আপনাকে কেবল সুরক্ষার ধরণ রয়েছে।


July == July + months(12*x)এক্স নির্বিশেষে এটি সত্য হওয়ার নিশ্চয়তা কি ? এমনকি x INT_MAX হওয়ার জন্য?
পিয়োটারনাইজ

4
প্রায়। যদি 12*xওভারফ্লো হয় তবে আপনি ঠিক সেখানেই নির্ধারিত আচরণ পেয়েছেন ( monthsকনস্ট্রাক্টর রান করার আগে )। তবে মানটি যদি months12 (ধনাত্মক বা negativeণাত্মক) এর একাধিক হয় তবে হ্যাঁ সংযোজন (বা বিয়োগ) মূলত একটি অপ-বিকল্প। আপনি একই জিনিস পেতে হবে July == July + years(x)
হাওয়ার্ড হিনান্ট

আপনি আপনার প্রশ্ন 17:58 জিজ্ঞাসা করেছেন এবং আপনি 17:58 এও উত্তর দিয়েছেন?
ডিজেমা

4
শুধুমাত্র আপনার নিজের প্রশ্নের উত্তর দেওয়া ঠিক নয়, এটি সুস্পষ্টভাবে উত্সাহিত করা হয়েছে: stackoverflow.blog/2011/07/01/… , stackoverflow.com/help/self-answer
হাওয়ার্ড হিন্যান্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.