কাঠামোটিকে অস্থির করে তোলা কি তার সমস্ত সদস্যকে অস্থির করে তোলে?


98

যদি আমার থাকে:

struct whatever {
int data;
};
volatile whatever test;
হবে test.dataখুব উদ্বায়ী হবে?


4
দুর্দান্ত প্রশ্ন। আমি পড়েছি যে volatileসদস্য ফাংশন থাকা কেবল thisপয়েন্টারকেই অস্থির করে তোলে , তাই সদস্যরা যতবার অ্যাক্সেস করা হয় ততবার মেমরি থেকে পড়তে হবে তবে "আনুষ্ঠানিকভাবে" অস্থির হয় না।
আলেকজান্দ্র সি।

4
সম্ভবত একটি সদৃশ , তবে এখনও একটি ভাল প্রশ্ন।
সের্গেই তাচেনভ

উত্তর:


123

আরেকটি প্রশ্ন জিজ্ঞাসা করা যেতে পারে (বা মূল প্রশ্নটি দেখার জন্য কেবল অন্য উপায়):

কাঠামো constতৈরি করা কি তার সমস্ত সদস্যকে তৈরি করে const?

যদি আমার থাকে:

struct whatever { int data; };

const whatever test;

টেস্ট.ডাটা কি constহবে?

আমার উত্তর: হ্যাঁ আপনি যদি কোনও ধরণের বিষয়বস্তু ঘোষণা whateverকরেন constতবে এর সমস্ত সদস্যও constখুব বেশি হবে

একইভাবে, যদি আপনি প্রকারের একটি বস্তু ঘোষণা whateverদিয়ে volatileতারপর তার সকল সদস্যদের হতে হবে volatileখুব, যদি আপনার সাথে বস্তুর ঘোষণা ঠিক const, এটা সব সদস্য হতে হবে constখুব।

constএবং volatileএকই মুদ্রার দুটি মুখ; তারা এমন যাতে স্ট্যান্ডার্ড প্রায়শই তাদের হিসাবে উল্লেখ করে cv-qualifiers


স্ট্যান্ডার্ড থেকে উদ্ধৃতি (.1 7.1.5.1 / 8)

[দ্রষ্টব্য: অস্থিতিশীলতা অবজেক্টের সাথে জড়িত আক্রমণাত্মক অপ্টিমাইজেশন এড়ানোর জন্য বাস্তবায়নের জন্য একটি ইঙ্গিত কারণ কারণ কোনও প্রয়োগের মাধ্যমে অবজেক্টের মান নির্ধারণ করা যায় না বলে বস্তুর মান পরিবর্তন করা যেতে পারে। বিস্তারিত শব্দার্থবিজ্ঞানের জন্য 1.9 দেখুন। সাধারণভাবে, উদ্বোধনের শব্দার্থকগুলি সি + তে যেমন হয় তেমনই হ'ল]

এর অর্থ, যদি আপনার অবজেক্টটি কোনও কাঠামোর উদাহরণ হয় , তবে সংকলকটি বস্তুর সাথে জড়িত আক্রমণাত্মক অনুকূলতা এড়াতে পারে না , যদি না এটি তার প্রতিটি সদস্যের আক্রমণাত্মক অপ্টিমাইজেশন এড়িয়ে চলে। (অন্যথায়, কীভাবে এটি বস্তুর সাথে জড়িত অপ্টিমাইজেশন এড়াতে পারে?)


সম্পর্কিত বিষয়:

আমরা কেন সি ++ এ উদ্বায়ী কীওয়ার্ড ব্যবহার করব?


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

-2

থেকে: http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx

পয়েন্টার দ্বারা নির্দেশিত বস্তুটিকে কনস্ট বা অস্থির হিসাবে ঘোষণা করতে, ফর্মটির ডিক্লেয়ারেশন ব্যবহার করুন:

const char *cpch;
volatile char *vpch;

পয়েন্টারের মান ঘোষণা করতে - অর্থাৎ পয়েন্টারে সঞ্চিত প্রকৃত ঠিকানা - কনস্ট বা অস্থির হিসাবে, ফর্মটির একটি ঘোষণাপত্র ব্যবহার করুন:

char * const pchc;
char * volatile pchv;

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