স্থির কীওয়ার্ডের অবমূল্যায়ন… আর নেই?


89

সি ++ তে staticকোনও চিহ্নের দৃশ্যমানতা (পরিবর্তনশীল বা ফাংশন ঘোষণাপত্র) প্রভাবিত করতে অনুবাদ ইউনিটের মধ্যে কীওয়ার্ডটি ব্যবহার করা সম্ভব ।

N3092 এ, এটি অবহেলা করা হয়েছিল:

আনেক্সেক্স ডি .২ [ডিপ্রেস্টট্যাটিক] নাম স্থানের স্কোপগুলিতে
অবজেক্টগুলি ঘোষণার সময় স্থিতিশীল কীওয়ার্ডের ব্যবহার হ্রাস করা হয় (দেখুন ৩.৩..6)।

N3225 এ, এটি সরানো হয়েছে।

শুধুমাত্র নিবন্ধটি আমি খুঁজে পাইনি কিছুটা অনানুষ্ঠানিক হয়।

যদিও এটি আন্ডারলাইন করে যে সি এর সাথে সামঞ্জস্য করার জন্য (এবং সি-প্রোগ্রামগুলি সি ++ হিসাবে সংকলন করার ক্ষমতা) অবমূল্যায়ন বিরক্তিকর। তবে, সি ++ সরাসরি কোনও সি প্রোগ্রাম সংকলন করা ইতিমধ্যে হতাশাব্যঞ্জক অভিজ্ঞতা হতে পারে, সুতরাং এটি বিবেচনার পরোয়ানা পেলে আমি অনিশ্চিত।

কেউ কেন জানেন কেন এটি পরিবর্তন করা হয়েছিল?


4
আপনি সিতে নামস্থান সুযোগে অবজেক্টগুলি ঘোষণা করেন?
এটিয়েন ডি মার্টেল

হি, থেক্স, কোথায় এটি ধরে রাখতে পেল। মন্তব্য মুছতে চেষ্টা করেছেন কিন্তু আপনি সেখানে আমাকে মারধর করেছেন।
এডওয়ার্ড স্ট্রেঞ্জ

প্রশ্ন থেকে উঠে stackoverflow.com/questions/4725204/...
ফ্রেড Nurk

4
এটি সি ++ কমিটিটিকে স্ট্যান্ডার্ড :-) এর পরবর্তী সংস্করণে কিছু ছাড়ার সুযোগ দেয়
জেমস ম্যাকনেলিস

উত্তর:


75

ইন সি ++ স্ট্যান্ডার্ড কোর ভাষা ডিফেক্ট রিপোর্ট এবং গ্রহণযোগ্য বিষয়, পরিবর্ধন ও পরিবর্তন 94 অধীনে 1012. Undeprecating স্ট্যাটিক `তারা নোট:

যদিও 7.3.1.1 [নেমস্পেস.অনামযুক্ত] বলেছেন যে নামস্থান স্কোপের ক্ষেত্রে ভেরিয়েবলগুলি ঘোষণার জন্য স্ট্যাটিক কীওয়ার্ডের ব্যবহার হ্রাস করা হয়েছে কারণ নামবিহীন নেমস্পেস একটি উচ্চতর বিকল্প সরবরাহ করে, সম্ভবত সম্ভাব্য সম্ভাবনাটি ভবিষ্যতের যে কোনও স্থানে সরিয়ে ফেলা হবে ।

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


4
ঠিক আছে, মনে হচ্ছে অবচয় হ'ল লোকেরা পরিবর্তে নামহীন নাম ব্যবহার করতে উত্সাহিত করবে, এটি একটি ভাল জিনিস।
sbi

4
@ আনপ্রেসন: যদি অন্য কোনও কারণে না হয়, তবে কারণ নামবিহীন নেমস্পেসগুলি তাদের টিউতে ভেরিয়েবল, কনস্ট্যান্ট, ফাংশন এবং টাইপগুলি অভ্যন্তরীণ তৈরির জন্য একই প্রক্রিয়া সরবরাহ করে। static class ... , OTOH, কাজ করবে না।
এসবিআই

4
@ এনবিটি: আপনি স্ট্যাটিক প্রতীকগুলি টেমপ্লেট আর্গুমেন্ট হিসাবে ব্যবহার করতে পারবেন না এবং কারণ অনেক নবজাতক স্থিতিস্থাপকটি ব্যবহার করা সহজ এবং তারপরে <functional> এবং <algorithm> এট আল চেষ্টা করার চেষ্টা করছেন un শুধু একটি দ্রুত চিন্তা।
সেবাস্তিয়ান মাচ

4
"নামবিহীন নামের জায়গাগুলির সাথে আপনার যে বয়লারপ্লেট কোডের প্রয়োজন নেই তা"? "বয়লারপ্লেট কোড" কী? " namespace {" এবং " }" এর বাইরে কিছু ?
তোয়াই

4
@ এরিক অ্যারোনাস্টি যদি একই নামের অন্য কোনও ফাইলে আপনার "স্থানীয় শ্রেণি" থাকে তবে আপনি ওডিআর লঙ্ঘন করবেন।
এলএফ

32

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

সি ++ তে প্রতীকের দৃশ্যমানতা (পরিবর্তনশীল বা ফাংশন ঘোষণাপত্র) প্রভাবিত করতে অনুবাদ ইউনিটের মধ্যে স্থির কীওয়ার্ড ব্যবহার করা সম্ভব।

লিঙ্কেজ আসলে।

N3092 এ, এটি অবহেলা করা হয়েছিল:

অবচয় নির্দেশ করে:

  • অভিপ্রায় ভবিষ্যতে বৈশিষ্ট্য মুছে ফেলার জন্য; এর অর্থ এই নয় যে প্রত্যাখ্যানিত বৈশিষ্ট্যগুলি পরবর্তী মানক সংশোধনীতে মুছে ফেলা হবে, বা সেগুলি "শীঘ্রই" মুছে ফেলা হবে বা একেবারে। এবং নন-অবহিত বৈশিষ্ট্যগুলি পরবর্তী মানক সংশোধনীতে মুছে ফেলা হতে পারে।
  • এর ব্যবহারকে নিরুৎসাহিত করার একটি আনুষ্ঠানিক প্রচেষ্টা ।

পরের বিষয়টি গুরুত্বপূর্ণ is যদিও কখনও আনুষ্ঠানিক প্রতিশ্রুতি নেই যে আপনার প্রোগ্রামটি ভাঙবে না, কখনও কখনও নীরবে, পরবর্তী মানদণ্ডে, কমিটির "যুক্তিসঙ্গত" কোডটি ভঙ্গ করা এড়ানোর চেষ্টা করা উচিত। অবজ্ঞার প্রোগ্রামারদের বলা উচিত যে কোনও বৈশিষ্ট্যের উপর নির্ভর করা অযৌক্তিক

যদিও এটি আন্ডারলাইন করে যে সি এর সাথে সামঞ্জস্য করার জন্য (এবং সি-প্রোগ্রামগুলি সি ++ হিসাবে সংকলন করার ক্ষমতা) অবমূল্যায়ন বিরক্তিকর। তবে, সি ++ সরাসরি কোনও সি প্রোগ্রাম সংকলন করা ইতিমধ্যে হতাশাব্যঞ্জক অভিজ্ঞতা হতে পারে, সুতরাং এটি বিবেচনার পরোয়ানা পেলে আমি অনিশ্চিত।

একটি সি / সি ++ সাধারণ উপসেটটি সংরক্ষণ করা খুব গুরুত্বপূর্ণ, বিশেষত শিরোলেখ ফাইলগুলির জন্য। অবশ্যই, staticবিশ্বব্যাপী ঘোষণাগুলি অভ্যন্তরীণ সংযোগ সহ প্রতীক হিসাবে ঘোষণা এবং এটি একটি শিরোলেখ ফাইলটিতে খুব কার্যকর নয়।

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

কেবল এখন কিছু করার জন্য একটি "আরও ভাল উপায়" (কারও মতে) প্রোগ্রামগুলি পুরানো উপায়ে "খারাপ" বা "অযৌক্তিক" লিখিত করে তোলে না। staticবিশ্বব্যাপী সুযোগে অবজেক্টস এবং ফাংশনগুলির ঘোষণায় কীওয়ার্ডটি ব্যবহারের দক্ষতা সি এবং সি ++ উভয় সম্প্রদায়ের মধ্যেই ভালভাবে বোঝা যায় এবং বেশিরভাগ ক্ষেত্রে সঠিকভাবে ব্যবহৃত হয়।

একটি অনুরূপ শিরা ইন, আমি সি-শৈলী কাস্ট পরিবর্তন করতে যাচ্ছি না doubleকরতে static_cast<double>মাত্র কারণ, "সি-শৈলী কাস্ট খারাপ" হিসাবে static_cast<double>শূন্য তথ্য ও শূন্য নিরাপত্তা যোগ করা হয়েছে।

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

কোড পরিবর্তনগুলির ন্যায্যতা প্রয়োজন, এবং "পুরানো খারাপ এটি" কোড পরিবর্তনের পক্ষে ন্যায়সঙ্গত হয় না।

ভাষা পরিবর্তনগুলি খুব শক্তিশালী ন্যায়সঙ্গত প্রয়োজন। ভাষাটিকে খুব সামান্য সরল করে তোলা কখনই কোনও ব্রেকিং পরিবর্তনের যৌক্তিকতা নয়।

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

সুতরাং, সত্যিই, এটি একটি দুঃখের গল্প। ব্যবহারিক পরিণতিগুলির কারণে নয়: এর ঠিক শূন্য ব্যবহারিক পরিণতি হয়েছিল। তবে কারণ এটি আইএসও কমিটির সাধারণ জ্ঞানের সুস্পষ্ট অভাব দেখায়।


4
আপনি যেমন উল্লেখ করেছেন, এটিকে হতাশ করার বিষয়টি হ'ল এটির ব্যবহারকে নিরুৎসাহিত করা। তবুও আপনি কোনও যুক্তি দেখান না যে এর ব্যবহারকে নিরুৎসাহিত করা ভুল। আমি অবশ্যই আশা করি যে কোনও লোকই এখানে বেনামে নামের জায়গাগুলির উপরে লোকজনকে স্পেস-স্কোপড স্ট্যাটিক ঘোষণা ব্যবহার করতে উত্সাহিত করবে না। যদি না তাদের বিশেষভাবে সি-কে ক্রস-কম্পাইল করার প্রয়োজন হয়
নিকোল বোলাস

4
গ্লোবাল স্কোপ staticবা বেনামে নামস্থান ব্যবহার করা লোকদের সম্পর্কে আমি তেমন কিছু করি না, আমি উত্সাহিত বা নিরুৎসাহিতও করছি না। আমার বক্তব্যটি হ'ল আপনি যদি জনগণকে বেনামে থাকা নেমস্পেসগুলি ব্যবহার করতে নিরুৎসাহিত করতে চান তবে তাদেরকে ভাল যুক্তি দিতে হবে। অনুশীলনে, আমি বিশ্বাস করি যে বেশিরভাগ বাস্তবায়ন সংস্থায় নামবিহীন নেমস্পেসে ঘোষিত প্রতীকগুলি এলোমেলো নামের সাথে রফতানি করা হয়, ফলে রফতানি টেবিলটি বাড়ানো হয়। OTOH হিসাবে ঘোষিত সংস্থাগুলি staticকোনওভাবেই রফতানি হয় না। সুতরাং অনেকে এই পর্যবেক্ষণের ভিত্তিতে ব্যবহার করতে বেছে নেন static
কৌতূহলী

4
" আপনি নিজেরাই যেমন উল্লেখ করেছেন, এটির ব্যবহারকে নিরুৎসাহিত করা হ'ল এটিকে হতাশ করার বিষয়টি " এর ব্যবহারকে নিরুৎসাহ করার বিষয়টি হ'ল এটি কোনও দিন অদৃশ্য হয়ে যেতে পারে। আমার বক্তব্য হ'ল নেমস্পেস-স্কোপটি staticকখনও অদৃশ্য হবে না, সুতরাং এটিকে হ্রাস করা ভুল। " তবুও আপনি কোন যুক্তি দেখান না যে এর ব্যবহারকে নিরুৎসাহিত করা ভুল। " আমি কোনও দৃinc়প্রত্যয়ী যুক্তি দেখিনি যা দেখায় যে নামের স্থানের সুযোগ static"ভুল"। এটির ব্যবহারকে নিরুৎসাহিত করার জন্য এটিকে অবমূল্যায়ন করা ভুল, কারণ বাস্তবে কেউ বিশ্বাস করে না যে এটি অদৃশ্য হয়ে যাবে, এবং কারণ এটি লোককে বোঝায় না যে এটি ব্যবহার করা "ভুল"।
কৌতূহলী

4
পুরো ভাষা "কোনও দিন অদৃশ্য হয়ে যাবে"। আসুন সি ++ অবনতি করি।
অরবিটে

4
"অনুরূপ শিরাতে আমি সি-স্টাইলের ক্যাসেটগুলিকে স্ট্যাটিক_কাস্ট <ডাবল> এ দ্বিগুণ করতে যাচ্ছি না, কারণ" সি-স্টাইলের বর্ণগুলি খারাপ ", কারণ স্ট্যাটিক_কাস্ট <ডাবল> শূন্য তথ্য এবং শূন্য সুরক্ষা যোগ করে।" আমার অনেকগুলি সফ্টওয়্যার ইঞ্জিনিয়ারের সাথে আমার চিরন্তন লড়াই যা আমার আদিম থেকে অন্য শৈলীর সি স্টাইলের ক্যাসেটগুলির স্বতঃস্ফূর্ত ব্যবহার সম্পর্কে অভিযোগ রাখে।
মাকোগান

14

অবচয় বা না, এই ভাষার বৈশিষ্ট্যটি সরানো বিদ্যমান কোডগুলি ভেঙে দেবে এবং লোকজনকে বিরক্ত করবে।

"অজ্ঞাতনাস্থল স্থিতির চেয়ে ভাল" এবং "রেফারেন্সগুলি আরও ভাল পয়েন্টার" থাকে the হাঃ হাঃ হাঃ.


4
"রেফারেন্স আরও ভাল পয়েন্টার"? না, স্মার্ট পয়েন্টারগুলি স্মার্ট পয়েন্টার। আপনি হিপ, এরর, ফ্রি স্টোর থেকে বরাদ্দ মেমরির জন্য রেফারেন্স ব্যবহার করতে পারবেন না।
ড্যান ব্রেসলাউ

4
দুঃখিত, আমি একটি হাস্যকর হাসি দিয়ে এটি শেষ করতে ভুলে গেছি।
ম্যাক্সিম এগারুশকিন

4
@ ড্যান: ঠিক এই উত্তরটি যা বলেছিল: অনুরূপ ত্রুটিপূর্ণ চিন্তার ধারার সাথে "ইচ্ছাশক্তি"। কিছুটা ভিন্ন কারণে, এবং প্রয়োগযোগ্যতার ক্ষেত্রে তাদের কিছুটা ওভারল্যাপ থাকলেও গ্লোবাল-স্কোপ-স্ট্যাটিক যেমন রয়েছে, তেমন নামহীন স্থানগুলি একটি গুরুত্বপূর্ণ বৈশিষ্ট্য।
ফ্রেড নূরক

@ ফ্রেড, @ ম্যাক্সিম: দুঃখিত যদি আমি ভুল বুঝে থাকি, বা আমার স্মৃতি যদি ত্রুটিযুক্ত হয়। তবে আমি "রেফারেন্সগুলি আরও ভাল পয়েন্টারগুলি" শ্রেণীবদ্ধ করি না কারণ ইচ্ছাকৃত চিন্তার ক্ষেত্রে "বেনামে নামস্থান স্থিতির চেয়ে ভাল" " আমি উত্তরোত্তর কাঠি তৈরির প্রয়াস সম্পর্কে ভালভাবে অবগত, তবে রেফারেন্স সহ পয়েন্টারগুলি প্রতিস্থাপনের জন্য কেউ গুরুতর প্রস্তাব দেওয়ার কথা আমার মনে নেই। আবার, সম্ভবত এটি আমার নিজস্ব সচেতনতার অভাব রয়েছে।
ড্যান ব্রেস্লাউ

4
@ ড্যানব্রেস্লাউ: char* foo = new char; char& ref = *foo;আপনাকে প্রথমে পয়েন্টার দেওয়া হওয়ায় আপনার রেফারেন্সগুলি ব্যবহার করার ক্ষমতা সম্পর্কে যা কিছুই বলা যায় তা নয়।
অরবিটে হালকা ঘোড়দৌড়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.