কীভাবে ছোড়াছুড়ি এবং কীটগুলি কীভাবে কাজ করে?


14

এই কোড সহ:

int main()
{
    try
    {
        throw -1;
    }
    catch (int& x)
    {
        std::cerr << "We caught an int exception with value: " << x << std::endl;
    }
    std::cout << "Continuing on our merry way." << std::endl;

    return 0;
}

আমাদের আছে:

/tmp$ ./prorgam.out
Continuing on our merry way
We caught an int exception with value: -1

কেমন করে catchব্লক পড়া -1যেমন int&? আমরা অ-কনস্ট্যান্ট লভ্যালু রেফারেন্সের জন্য কোনও মান নির্ধারণ করতে পারি না।

এবং দ্বিতীয় std::coutবিবৃতি প্রথম std::cerrবিবৃতি দেওয়ার আগেই কার্যকর করা হয় কেন ?


2
আপনি কি নিশ্চিত যে এটি আপনার প্রাপ্ত সঠিক আউটপুট? We caught an int exception with value: -1লাইন প্রথম মুদ্রিত দিতে হবে।
হলি ব্ল্যাককিট

1
@ শেফ, দুঃখিত আপনি ঠিক বলেছেন, প্রথম আউটপুটটি পুনঃনির্দেশিত হয় error streamনা standard stream
গাসেম রামযানী


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

1
@ ফ্রানসোয়াআন্ড্রিয়াক্স throwআপনি যে বস্তুটিতে এটি পাস করবেন তার একটি অনুলিপি তৈরি করে (বা সরিয়ে দেয়)। রেফারেন্সটি সেই অনুলিপিটির সাথে আবদ্ধ। এটি ধরণের বোঝায় যে অনুলিপিটি একটি লভ্যালু।
হলি ব্ল্যাককিট

উত্তর:


10

এটি [ কারণ। থ্রো] / 3 এর কারণে ঠিক আছে

একটি ব্যতিক্রম কপি-ইনিশিয়েলাইজ ([dcl.init], [class.copy.ctor]) একটি অস্থায়ী বস্তু নিক্ষেপ করা, যাকে ব্যতিক্রম বস্তু বলা হয়। অস্থায়ী নির্দেশকারী একটি মূল্যবান ম্যাচিং হ্যান্ডলারে ঘোষিত ভেরিয়েবলটি সূচনা করতে ব্যবহৃত হয় ([ছাড়া। হ্যান্ডল ])।

জোর আমার

আপনি দেখতে পাচ্ছেন, এটি সাময়িক হলেও, সংকলক হ্যান্ডলারটি আরম্ভ করার জন্য এটি মূল্য হিসাবে বিবেচনা করে। এ কারণে আপনার কোনও কনফারেন্স রেফারেন্সের দরকার নেই।


1
কিন্তু বার্তাগুলি প্রদর্শিত ক্রমটির সাথে কী হবে?
টোমা জ্যাটো - মনিকা

8

এই throwরেফারেন্স থেকে :

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

সুতরাং "অবজেক্ট" অস্থায়ী হলেও এটি এখনও একটি মূল্যবান এবং যেমন আপনি রেফারেন্সের মাধ্যমে এটি ধরতে পারেন।

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