নিজস্ব ইনিশিয়ালাইজারে পরিবর্তনশীল ব্যবহার


22

[বেসরাল.স্কোপ.পিডিএসিএল] / সি ++ ২০ স্ট্যান্ডার্ডের খসড়ার 1 / এর একটি নোটে নিম্নোক্ত (অ-আদর্শিক) উদাহরণ রয়েছে ( পুল অনুরোধের মার্জ হওয়ার আগে থেকে 3580 এর আংশিক উক্তি , এই প্রশ্নের উত্তর দেখুন):

unsigned char x = x;

[...] এক্স এর নিজস্ব (অনির্দিষ্ট) মান দিয়ে শুরু করা হয়।

এটির কি আসলে C ++ 20 এ সু-সংজ্ঞায়িত আচরণ রয়েছে?


সাধারণত সূত্রের স্ব- সূচনাকরণের সূচনা সম্পন্ন হওয়ার আগেই এর মানকে অনির্দিষ্টT x = x; করে রাখার দ্বারা নির্ধারিত আচরণ হয় । অনির্দিষ্ট মান মূল্যায়ন সাধারণত অনির্ধারিত আচরণ (ঘটায় [basic.indent] / 2 ), কিন্তু সেখানে একটি নির্দিষ্ট ব্যতিক্রম নয় [basic.indent] /2.3 যে সরাসরি একটি আরম্ভের অনুমতি দেয় একটি lvalue থেকে পরিবর্তনশীল অনির্দিষ্ট মান (একটি অনির্দিষ্ট মান আরম্ভের ঘটাচ্ছে )।xunsigned charunsigned char

এটি কেবলমাত্র অনির্ধারিত আচরণের কারণেই নয়, তবে এমন অন্যান্য ধরণের ক্ষেত্রেও হবে Tযা স্বাক্ষরযুক্ত সরু চরিত্রের ধরন নয় বা std::byteযেমন int x = x;। এই বিবেচনাগুলি C ++ 17 এ প্রয়োগ করা হয়েছিল এবং তার আগে, নীচে লিঙ্কিত প্রশ্নগুলিও দেখুন।

যাইহোক, এমনকি unsigned char x = x;, বর্তমান খসড়ার [বেসিক.লাইফটাইম] / 7 বলে:

একইভাবে, কোনও বস্তুর আজীবন শুরু হওয়ার আগে [...] গ্লাভের বৈশিষ্ট্যগুলি ব্যবহার করে যা এর মানের উপর নির্ভর করে না এটি ভালভাবে সংজ্ঞায়িত। প্রোগ্রামটির নির্ধারিত আচরণ থাকলে যদি:

  • গ্লুভ্যুটি অবজেক্ট অ্যাক্সেস করতে ব্যবহৃত হয়, বা

  • [...]

এটি বোঝাচ্ছে যে xউদাহরণের মানটি কেবল তার জীবদ্দশায় ব্যবহার করা যেতে পারে।

[বেসিক.লাইফটাইম] / 1 বলেছেন:

[...]

টি টাইপের কোনও অবজেক্টের জীবনকাল শুরু হয় যখন:

  • [...] এবং
  • এর সূচনা (যদি থাকে) সম্পূর্ণ (শূন্য প্রারম্ভিককরণ সহ) ([dcl.init]),

[...]

এইভাবে xজীবনকাল শুরু হওয়ার পরে শুরু হয় initial তবে উদ্ধৃত উদাহরণে xমানটির ব্যবহার শুরু হওয়ার পূর্বেই ব্যবহৃত হবে x। অতএব ব্যবহারের অপরিবর্তিত আচরণ রয়েছে।

আমার বিশ্লেষণটি কি সঠিক এবং যদি এটি হয় তবে এটি ব্যবহার-পূর্ব-প্রারম্ভিককরণের মতো একই ক্ষেত্রে প্রভাবিত করে affect

int x = (x = 1);

কোনটি, যতদূর আমি বলতে পারি, C ++ 17 এবং এর আগেও ভাল সংজ্ঞা দেওয়া হয়েছিল?


মনে রাখবেন যে সি ++ 17 (চূড়ান্ত খসড়া) তে আজীবন শুরু হওয়ার জন্য দ্বিতীয় প্রয়োজনটি ভিন্ন ছিল :

  • যদি অবজেক্টটির শূন্য-শুরুর আরম্ভ হয় তবে এর সূচনাটি সম্পূর্ণ,

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

সি ++ 17 এর পূর্বে শব্দটি আবার আলাদা, তবে একই ফলাফলের সাথে।


প্রশ্নটি অনির্দিষ্ট মান ব্যবহার করার সময় অপরিজ্ঞাত আচরণ সম্পর্কে নয় যা অন্তর্ভুক্ত ছিল যেমন নীচের প্রশ্নগুলি:


@ ল্যাঙ্গুয়েজএলওয়্যার আমি আত্মবিশ্বাসী নই যে আমি সঠিক, বিশেষত যদি কেউ এখনও উত্তর না দেয় তবে নয়। অন্যরা যদি এখানে আমার সাথে একমত হতে চলেছে তবে আমি পরে একটি ফাইল করতে পারি (বা অন্য কেউ আমার আগে আসবে), তবে আমি যে বিষয়গুলি সম্পর্কে নিশ্চিত নই সেগুলি ফাইল করতে চাই না।
আখরোট

@ ল্যাঙ্গুয়েজলওয়ের: যদি কার্যপত্রটি অস্পষ্টভাবে ভুল জিনিস বলে তবে এটি সম্পাদকীয় বিষয় হতে পারে না।
ডেভিস হ্যারিং

1
শব্দটি P1358 দ্বারা পরিবর্তিত হয়েছে ।
xskxzr

1
@ এক্সস্কক্সজার রাইট, এবং মাঝামাঝি সময়ে ল্যাঙ্গুয়েজওয়ায়ার একটি সম্পাদকীয় ইস্যুও দায়ের করেছেন , যা মনে হয় সিডব্লুজির কাছে উদ্দেশ্যটির স্পষ্টতার জন্য প্রেরণ করা হয়েছে।
আখরোট

1
@ ক্লকডব্লার্ক int x ^= x;সিনট্যাক্টিকালি সুগঠিত নয়। আপনি হয় প্রারম্ভকালীন (যেমন int x = x;এটি ইউবি হলেও) বা একটি এক্সওর অ্যাসাইনমেন্ট এক্সপ্রেশন স্টেটমেন্ট (যেমন x ^= x;, এটি ইউবি হলেও xপ্রকারের int, পূর্বনির্ধারিত ছিল এবং আগে নির্ধারিত হয়নি) দিয়ে একটি পরিবর্তনশীল সংজ্ঞা থাকতে পারে। আপনি এই দুটি এক সাথে মিশাতে পারবেন না।
আখরোট

উত্তর:


8

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

এখানে, দ্বিতীয় \ টিকোড {x of এর সূচনাটি পূর্বনির্ধারিত আচরণ করে, কারণ প্রাথমিককরণকারী তার জীবনকাল \ iref {বেসিক.লাইফ} এর বাইরে দ্বিতীয় \ tcode {x ac অ্যাক্সেস করে}

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

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