উভয় (a)
এবং (b)
অনির্ধারিত আচরণের ফলাফল। নাল পয়েন্টারের মাধ্যমে সদস্য ফাংশনটিতে কল করা সর্বদা অপরিবর্তিত আচরণ। যদি ফাংশনটি স্থিতিশীল হয় তবে এটি প্রযুক্তিগতভাবেও অপরিবর্তিত, তবে কিছু বিবাদ রয়েছে।
প্রথমে বুঝতে হবে এটি কেন নাল পয়েন্টারকে অবজ্ঞা করার জন্য এটি অপরিবর্তিত আচরণ। C ++ 03 এ আসলে এখানে কিছুটা অস্পষ্টতা রয়েছে।
যদিও " অপরিজ্ঞাত আচরণে নাল পয়েন্টার ফলাফলকে ডিফারেন্সিং করা " §1.9 / 4 এবং .38.3.2 / 4 উভয়ই নোটগুলিতে উল্লেখ করা হয়েছে, এটি কখনই স্পষ্টভাবে বলা হয়নি। (নোটগুলি মানহানিকর are
তবে, কেউ এটিকে §3.10 / 2 থেকে বাদ দেওয়ার চেষ্টা করতে পারেন:
একটি ল্যাভেলু একটি অবজেক্ট বা ফাংশনকে বোঝায়।
ডিফেরেন্সিংয়ের সময়, ফলাফলটি একটি মূল্য। একটি নাল পয়েন্টার কোনও অবজেক্টকে বোঝায় না , অতএব আমরা যখন ল্যাভেলুটি ব্যবহার করি তখন আমাদের অপরিজ্ঞাত আচরণ হয়। সমস্যাটি হ'ল আগের বাক্যটি কখনই বর্ণিত হয় না, সুতরাং ল্যাভালুটি "ব্যবহার" করার অর্থ কী? এমনকি এটিকে একেবারে উত্পন্নও করতে চান, বা এটিকে আরও আনুষ্ঠানিক অর্থে লভ্যালু-টু-রিভ্যালু রূপান্তর সম্পাদনের জন্য ব্যবহার করতে চান?
নির্বিশেষে, এটি অবশ্যই কোনও মূলকে (.14.1 / 1) রূপান্তর করা যাবে না:
যদি লভ্যালুটি অবজেক্টটি বোঝায় তবে এটি টাইপ টি-এর একটি অবজেক্ট নয় এবং টি থেকে প্রাপ্ত কোনও ধরণের অবজেক্ট নয় বা যদি অবজেক্টটি অনির্বাচিত করা হয়, এমন একটি প্রোগ্রাম যা এই রূপান্তরটির প্রয়োজন হয় তার অপরিজ্ঞাত আচরণ রয়েছে।
এখানে এটি অবশ্যই সংজ্ঞায়িত আচরণ।
অস্পষ্টতাটি শ্রদ্ধার সাথে অনির্ধারিত আচরণ করা বা না হওয়া থেকে অবৈধ পয়েন্টার থেকে মানটি ব্যবহার না করা থেকে আসে (অর্থাত্ একটি মূল্যমান পান তবে এটি কোনও মূল্যকে রূপান্তর করবেন না)। যদি না হয়, তবে int *i = 0; *i; &(*i);
ভালভাবে সংজ্ঞায়িত করা হয়েছে। এটি একটি সক্রিয় সমস্যা ।
সুতরাং আমাদের কঠোরভাবে "নাল পয়েন্টারকে অবজ্ঞা করা, সংজ্ঞায়িত আচরণ" দৃষ্টিভঙ্গি পাওয়া এবং দুর্বল "একটি অবজ্ঞাপিত নাল পয়েন্টার ব্যবহার করুন, অপরিজ্ঞাত আচরণ করুন" দেখুন।
এখন আমরা প্রশ্ন বিবেচনা।
হ্যাঁ, (a)
অনির্ধারিত আচরণের ফলাফল। আসলে, যদি this
নাল হয় তবে ফাংশনের বিষয়বস্তু নির্বিশেষে ফলাফল নির্ধারিত হয়।
এটি §5.2.5 / 3 থেকে অনুসরণ করে:
যদি E1
"দশম শ্রেণিতে পয়েন্টার" টাইপ থাকে তবে এক্সপ্রেশনটি E1->E2
সমমানের ফর্মে রূপান্তরিত হয়(*(E1)).E2;
*(E1)
একটি কঠোর ব্যাখ্যার সাথে অনির্ধারিত আচরণের ফলাফল .E2
ঘটবে এবং এটিকে একটি মূলকে রূপান্তরিত করে দুর্বল ব্যাখ্যার জন্য এটি অনির্ধারিত আচরণ করে।
এটি অনুসরণ করে যে এটি সরাসরি (ined9.3.1 / 1) থেকে অপরিবর্তিত আচরণ:
যদি দশম শ্রেণির ননস্ট্যাটিক সদস্য ফাংশনটিকে এমন কোনও বস্তুর জন্য বলা হয় যা এক্স টাইপ নয়, বা এক্স থেকে প্রাপ্ত কোনও ধরণের জন্য, আচরণটি অপরিবর্তিত।
স্ট্যাটিক ফাংশন সহ, কঠোর বনাম দুর্বল ব্যাখ্যা পার্থক্য করে। কড়া কথা বলতে গেলে এটি অপরিজ্ঞাত:
স্থির সদস্যকে ক্লাস সদস্য অ্যাক্সেস সিনট্যাক্স ব্যবহার করে উল্লেখ করা যেতে পারে, যার ক্ষেত্রে অবজেক্ট-এক্সপ্রেশনকে মূল্যায়ন করা হয়।
এটি হ'ল এটির মূল্যায়ন ঠিক এমনভাবে হয় যেন এটি অ স্থির ছিল এবং আমরা আবারও একটি নাল পয়েন্টারকে অবজ্ঞার সাথে দেখি (*(E1)).E2
।
তবে E1
স্থির সদস্য-ফাংশন কলটিতে ব্যবহৃত না হওয়ায় আমরা যদি দুর্বল ব্যাখ্যাটি ব্যবহার করি তবে কলটি সঠিকভাবে সংজ্ঞায়িত। *(E1)
ফলস্বরূপ একটি ফলমূল হয়, স্থির ফাংশনটি সমাধান করা হয়, *(E1)
বাতিল করা হয় এবং ফাংশনটি বলা হয়। কোনও মূল্যমানের থেকে মূল্যমান রূপান্তর নেই, তাই কোনও সংজ্ঞায়িত আচরণ নেই।
সি ++ 0 এক্সে, এন 3126 অনুসারে, অস্পষ্টতা রয়ে গেছে। আপাতত, নিরাপদ থাকুন: কঠোর ব্যাখ্যাটি ব্যবহার করুন।