অনির্ধারিত অন্তর্ভুক্ত অবজেক্ট তৈরি


9

যেহেতু নিম্ন স্তরের বস্তু ম্যানিপুলেশন জন্য অবজেক্টের P0593 অন্তর্নিহিত সৃষ্টি গৃহীত হয়েছে, বস্তু এখন তৈরি করা যেতে পারে পরোক্ষভাবে C ++ 20।

বিশেষ করে বাক্যে কথন প্রস্তাব চালু নির্দিষ্ট অপারেশন (যেমন দেয় std::mallocস্বয়ংক্রিয়ভাবে) তৈরি এবং নির্দিষ্ট প্রকারের অবজেক্টের জীবদ্দশায়, তথাকথিত শুরু অন্তর্নিহিত-জীবনকাল ধরনের , যদি এই ধরনের বস্তু প্রবর্তনের অন্যথায় অনির্ধারিত আচরণ সঙ্গে একটি প্রোগ্রাম কারণ আছে হবে সংজ্ঞায়িত আচরণ দেখুন / 10 [intro.object]

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

প্রকৃতপক্ষে এমন কোনও প্রোগ্রাম রয়েছে যার জন্য নিখুঁতভাবে তৈরি করা অবজেক্ট সেটটির এই পছন্দটি পর্যবেক্ষণযোগ্য? অন্য কথায়, এই নতুন নিয়মের মাধ্যমে সংজ্ঞায়িত, তবে অনির্দিষ্ট, আচরণ সহ এমন কোনও প্রোগ্রাম রয়েছে, যাতে আউটপুট থেকে অনুমান করা সম্ভব হয় যেগুলি অন্তর্ভুক্ত বস্তুর প্রকারের সেটগুলি (একাধিক সম্ভাব্যর বাইরে) তৈরি করা হয়েছিল?

বা এই বাক্যটি কি কেবল বিমূর্ত মেশিনে (পর্যবেক্ষণযোগ্য প্রভাব ছাড়াই) প্রোগ্রামের কার্যকারিতা পরিষ্কার করার জন্য বোঝানো হয়েছিল?


2
(ওটি) যদি কোনও অন্তর্নিহিতভাবে নির্মিত বস্তুটি কোনও আন্ত হয়, তবে আমরা কি তাকে "অন্তর্নিহিত" বলতে পারি?
এমএম

অনির্দিষ্ট সেট থেকে উপাদানটির পছন্দটি ম্যালোকের পয়েন্টে অবশ্যই জানা উচিত কিনা তা অস্পষ্ট বলে মনে হচ্ছে
এমএম

@ এমএম আমি ধরে নিয়েছি যে সেটটির পছন্দটি কার্যকরভাবে প্রয়োগের প্রবাহের বাইরে পুরো প্রোগ্রামের সম্পাদনের জন্য একক পছন্দ হিসাবে বিমূর্তভাবে বিবেচিত হত, তবে ক্রিয়াটি সরাসরি প্রশ্নে (যেমন std::malloc) অপারেশনে ঘটেছিল , অন্যথায় আপনি সংজ্ঞা নিয়ে সমস্যা পেয়ে যাচ্ছেন ভবিষ্যতের উপর নির্ভর করে পুনরাবৃত্তভাবে।
আখরোট

আমি সেই বিষয়টিতে আরেকটি প্রশ্ন করেছি, স্ট্যাকওভারফ্লো . com/ জিজ্ঞাসা / 60627249 । অবশ্যই আরও কিছু Corollaries মনে মনে বসন্ত কিন্তু একবারে একটি প্রশ্ন ..
এমএম

প্রস্তাবে দাবি করা হয়েছে যে এত পার্থক্য করা অসম্ভব, যেহেতু এটি গুরুত্বপূর্ণ যেহেতু পছন্দটি "সঠিকভাবে" করার কোনও উপায় নেই, কেবল এটিকে এড়াতে অপ্টিমাইজেশন অন্যথায় ( খুব কঠোরভাবে) বৈধ হবে।
ডেভিস হেরিং

উত্তর:


9

আসুন আদর্শটিতে উদাহরণটি নেওয়া যাক এবং এটি কিছুটা পরিবর্তন করুন:

#include <cstdlib>
struct X { int a, b; };
X *make_x() {
  // The call to std::malloc implicitly creates an object of type X
  // and its subobjects a and b, and returns a pointer to that X object
  // (or an object that is pointer-interconvertible ([basic.compound]) with it),
  // in order to give the subsequent class member access operations
  // defined behavior.
  X *p = (X*)std::malloc(sizeof(struct X) * 2); // me: added the *2
  p->a = 1;
  p->b = 2;
  return p;
}

পূর্বে, সেখানে বৈধ বস্তু যে সংগ্রহস্থলে পরোক্ষভাবে নির্মিত যেতে পারে মাত্র এক সেট ছিল - এতে ঠিক একটি হতে হয় X। তবে এখন, আমাদের কাছে দুটি স্টোর রয়েছে X, তবে কেবলমাত্র তাদের মধ্যে একটিতে লিখুন এবং এই প্রোগ্রামের কোনও কিছুই বাকী বাইটগুলিকে স্পর্শ করে না। সুতরাং অনেকগুলি অবজেক্টের সেট রয়েছে যা স্পষ্টভাবে তৈরি করা যেতে পারে - সম্ভবত দুটি Xগুলি, সম্ভবত একটি Xএবং দুটি intএস, সম্ভবত একটি Xএবং আট charএস, ...

কোন সেটটি তৈরি করা হয়েছে তা পর্যবেক্ষণযোগ্য নয়, কারণ যদি সেখানে কোনও প্রকৃত পর্যবেক্ষণ থাকে, তবে এটি কেবলমাত্র সেটের ক্ষেত্রে সম্ভাবনাগুলি হ্রাস করে যেগুলি বৈধ ছিল। আমরা যদি এমন কিছু করি p[1]->a = 3তবে সম্ভাব্যতার মহাবিশ্বটি কেবলমাত্র দু'এর সাথে একের কাছে নেমে আসবে X

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


এটি যাইহোক আমার অনুমান।
ব্যারি

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

1
অথবা কি যদি শুধুমাত্র ব্যবহারের ধরনের glvalues মাধ্যমে হল [CV] char, unsigned charঅথবা std::byte? আমার ধারণা, তুচ্ছ-অনুলিপিযোগ্য কোনও প্রকারের কোনও বস্তুও এখানে থাকতে পারে?
aschepler

2
এমনকি আসল উদাহরণে, একটি অবজেক্টের সাথে একটি অ্যারে অবজেক্ট তৈরি করাও সম্ভব X
টিসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.