স্ট্যাটিক গ্লোবাল এবং সি ++ এ বেনামে নামের স্থান ace


11
  1. পরবর্তীটি পরিচয় করানোর সময় কেন সি ++ অজ্ঞাতনামা নামস্থানে (অভ্যন্তরীণ সংযোগ) এবং চিহ্নগুলির মধ্যে কোনও পার্থক্য রেখেছিল?

  2. এই কারণগুলির মধ্যে কোনওটি কি এখনও বৈধ, বা নতুন কোনও আছে?

  3. এমন কোনও স্থান কি বাকী রয়েছে যেখানে তারা এখনও পৃথক রয়েছে তবে স্বেচ্ছাসেবী নিয়ম যে বেনামে বৈশ্বিক (বা নামস্থান-স্কোপ) ইউনিয়নগুলি থাকতে হবেstatic , এবং সেগুলি কী?

  4. বোনাস-পয়েন্টগুলির জন্য, যদি তাদের আলাদা হওয়ার কোনও ভাল কারণ না থাকে তবে তাদের সমতুল্য করার অনুরোধ আছে?


সি ++ প্রবর্তিত নেমস্পেস (সি ++ 98), এবং বিশেষত নামবিহীন নেমস্পেসগুলি যখন স্ট্যাটিক গ্লোবালগুলিকে উত্সাহের সাথে নতুন বিষয়টিকে অপ্রচলিত এবং নিকৃষ্ট হিসাবে অবচিত করা হয়েছিল, যদিও এটি সি ++ 11 এর সাথে প্রত্যাবর্তিত হয়েছিল :
স্থির কীওয়ার্ডের অবমূল্যায়ন… আর না?

সি ++ ১১ এর আগে, অভ্যন্তরীণ লিঙ্কেজ সহ প্রতীকগুলি টেমপ্লেট-আর্গুমেন্ট হিসাবে ব্যবহার করা যায়নি: সি ++ ০ টি কেন টেমপ্লেট প্যারামিটারের বাহ্যিক সংযোগ স্থাপনের প্রয়োজন ছিল?


দেখে মনে হচ্ছে আপনি বেশিরভাগই নিজের প্রশ্নের উত্তর দিয়েছেন, "সম্মতি বাস্তবায়ন" বিট ব্যতীত; সম্ভবত আপনি দ্বিতীয়ার্ধটি সরিয়ে এবং পরিবর্তে উত্তর হিসাবে পোস্ট করা বিবেচনা করা উচিত? নাকি এখানে এখনও কিছু উত্তর নেই?
কাইল স্ট্র্যান্ড

@ কাইলস্ট্র্যান্ড এটির সবগুলিই সংস্কার করেছে।
ডিপুলিপিকেটর

উত্তর:


3

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

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

#include <iostream>

struct Foobar
{
    int   foo;
    float bar;
};

namespace
{

struct Foobar
{
    double baz;
};

} // namespace

int main()
{
    std::cout << "HELLO!\n";
}

এখানে একটি লাইভ পরীক্ষা


এটি কম্পাইল করে কারণ আপনি মূল ফাংশনে ফুবার ব্যবহার করেন না।
ডিসিল

আরও গুরুত্বপূর্ণ বিষয় হল যদি অন্য একটি .cpp ফাইল তার নিজস্ব সংস্করণ ঘোষণা করে তবে কী হবে struct Foobar? আরও খারাপটি, ধরুন এখন এটি class Foobar। আপনি উভয়ের জন্য কনস্ট্রাক্টর তৈরি করার পরিকল্পনা কীভাবে করবেন তা ভেবে দেখুন।
অবসন্ন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.