স্ট্যান্ডিং নেমস্পেস ব্যবহার করা


110

স্ট্যান্ড নেমস্পেসের সাথে 'ব্যবহার করে' ব্যবহার করার ক্ষেত্রে বিভিন্ন মতামত রয়েছে বলে মনে হয়।

কেউ কেউ বলেন ' using namespace std' ব্যবহার করুন , অন্যরা বলছেন না বরং 'স্ট্যান্ড ফাংশনগুলির উপসর্গগুলি ব্যবহার করুন' std::"অন্যরা এই জাতীয় কিছু ব্যবহার করার সময় বলে:

using std::string;
using std::cout;
using std::cin;
using std::endl;
using std::vector;

সমস্ত স্ট্যান্ড ফাংশন ব্যবহার করা হবে।

প্রতিটি আগপাছ কি হয়?




উত্তর:


131

সর্বাধিক সি ++ ব্যবহারকারীদের বেশ খুশি পড়ছেন std::string, std::vectorএকটি কাঁচা এইজন্য আসলে, ইত্যাদি, vectorতোলে আমাকে ভাবছি যদি এই হয় std::vectorঅথবা একটি ভিন্ন ব্যবহারকারী-সংজ্ঞায়িত vector

আমি সর্বদা ব্যবহারের বিরোধী using namespace std;। এটি বিশ্বব্যাপী নেমস্পেসে সকল প্রকারের নাম আমদানি করে এবং সমস্ত ধরণের অপ-সুস্পষ্ট অস্পষ্টতার কারণ হতে পারে।

stdনেমস্পেসে রয়েছে এমন কিছু সাধারণ শনাক্তকারী এখানে : গণনা, বাছাই, সন্ধান, সমান, বিপরীত। স্থানীয় ভেরিয়েবল নামে পরিচিত হওয়ার countঅর্থ এটি using namespace stdআপনাকে countপরিবর্তে ব্যবহার করতে সক্ষম করবে না std::count

অযাচিত নাম দ্বন্দ্বের ক্লাসিক উদাহরণ নীচের মতো। কল্পনা করুন যে আপনি একটি শিক্ষানবিস এবং এটি সম্পর্কে জানেন না std::count। কল্পনা করুন যে আপনি হয় অন্য কোনও কিছু ব্যবহার করছেন <algorithm>বা এটি আপাতদৃষ্টিতে সম্পর্কিত নয় এমন শিরোলেখ দ্বারা টানা হয়েছে।

#include <algorithm>
using namespace std;

int count = 0;

int increment()
{
    return ++count; // error, identifier count is ambiguous
}

ত্রুটিটি সাধারণত দীর্ঘ এবং বন্ধুত্বপূর্ণ হয় কারণ std::countকিছু দীর্ঘ নেস্টেড ধরণের একটি টেম্পলেট।

যদিও এটি ঠিক আছে, কারণ std::countবিশ্বব্যাপী নেমস্পেসে যায় এবং ফাংশন গণনা এটি আড়াল করে।

#include <algorithm>
using namespace std;

int increment()
{
    static int count = 0;
    return ++count;
}

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

#include <algorithm>

int increment()
{
    using namespace std;
    static int count = 0;
    return ++count;
}

এবং অনুরূপ কারণে, countএখানে অস্পষ্ট। প্রত্যাশিত হতে পারে using namespace stdনা কারণ std::count, বাইরের আড়াল countusing namespaceনিয়ম মানে যে std::countকেমন লাগে (ইন incrementফাংশন) যেন বিশ্বব্যাপী সুযোগ অর্থাত একই সুযোগ এ ঘোষণা করা হয় যেমন int count = 0;তাই অস্পষ্টতা সৃষ্টি হয়।

#include <algorithm>

int count = 0;

int increment()
{
    using namespace std;
    return ++count; // error ambiguous
}

21
কিন্তু এটি ধরনের soooo এসটিডি :: উপসর্গ ছাড়া অনেক সহজ!
xtofl

69
@xtofl: না, তা হয় না। পাঁচটি অক্ষর টাইপ করার সময় তেমন প্রাসঙ্গিক নয়, তবে এই পাঁচটি অক্ষর পড়ার সময় খুব প্রাসঙ্গিক হতে পারে। কোডটি লেখার চেয়ে অনেক বেশি পঠনযোগ্য এবং সোর্স কোডের জন্য টাইপিংয়ের স্বাচ্ছন্দ্যের চেয়ে পড়ার স্বাচ্ছন্দ্য অনেক বেশি।
sbi

3
আপনি যুক্ত করতে পারেন যে ব্যবহারের বিবৃতি স্কোপ বিধিগুলির সাথে সঠিকভাবে আচরণ করে।
মার্টিন ইয়র্ক

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

5
ঠিক আছে, অবাক হয়েছি এর বিকল্প সম্পর্কে কেউ আলোচনা করেনি using std::xxx;। এটি নেমস্পেস দূষণ করে না, লেখার কোডটি ছোট হবে এবং আমি মনে করি এর copyচেয়ে অনেক বেশি পঠনযোগ্য std::copy
কিংবদন্তি 2 কে

41

বেসিকগুলি বাদ দিয়ে (সকল স্টাইল অবজেক্ট / ফাংশনগুলির স্ট্র্যান্ড :: যুক্তিযুক্ত হওয়া এবং আপনার যদি 'নেমস্পেস স্টাডি ব্যবহার না করেন তবে বিরোধের কম সম্ভাবনা রয়েছে)'

এটি আপনার কাছে রাখা উচিত নয় যে লক্ষণীয়

using namespace std

একটি শিরোনাম ফাইলে, যেহেতু এটি সমস্ত ফাইলগুলিতে প্রচার করতে পারে যা সেই শিরোনাম ফাইলটি অন্তর্ভুক্ত করে, এমনকি যদি তারা সেই নামটি ব্যবহার করতে না চায়।

কিছু ক্ষেত্রে এটির মতো জিনিস ব্যবহার করা খুব উপকারী

using std::swap

যেন অদলবদলের একটি বিশেষ সংস্করণ রয়েছে, সংকলক এটি ব্যবহার করবে, অন্যথায় এটি পিছিয়ে যাবে std::swap

যদি আপনি কল করেন তবে std::swapআপনি সর্বদা বেসিক সংস্করণটি ব্যবহার করেন যা অপ্টিমাইজড সংস্করণটিকে কল করবে না (যদি তা বিদ্যমান থাকে)।


10
উল্লেখ করার জন্য +1 using std::swap(যা আমি কখনও ব্যবহার করি না)।
sbi

1
উল্লেখ করার জন্য +1 এটি u n sপ্রচার করতে পারে। কেবল এটি লক্ষ করার জন্য যে এটি সঠিকভাবে নির্মিত হেডারগুলিতে প্রবেশ করতে পারে: এগুলি কেবল দুর্বৃত্ত শিরোনামের পরে অন্তর্ভুক্ত করতে হবে।
কুমারানা

1
তবে আপনি যদি কোনও swapবা move(বা hash, lessইত্যাদি) বিশেষীকরণের সংজ্ঞা দিচ্ছেন তবে আপনার সেই বিশেষত্বটিকে namespace stdযেভাবেই করা উচিত । উদাহরণস্বরূপ:namespace std {template<> class hash<X> {public: size_t operator()(const X&) const};} class X: {friend size_t std::hash<X>::operator()(const X&)};
এজেম্যানসফিল্ড

28

প্রথমত, কিছু পরিভাষা:

  • ব্যবহার-ঘোষণা : using std::vector;
  • ব্যবহার-নির্দেশিকা : using namespace std;

আমি মনে করি যে ব্যবহার -নির্দেশাবলী ব্যবহার করা ঠিক আছে, যতক্ষণ না তারা শিরোনাম ফাইলে বৈশ্বিক সুযোগে ব্যবহার না করে। তাই হচ্ছে

using namespace std;

আপনার .cpp ফাইলটিতে আসলেই কোনও সমস্যা নয় এবং এটি যদি পরিণত হয় তবে এটি সম্পূর্ণরূপে আপনার নিয়ন্ত্রণে রয়েছে (এবং এটি যদি ইচ্ছা হয় তবে নির্দিষ্ট ব্লকেও স্কোপ করা যেতে পারে)। আমি বেশ কয়েকজন বাছাইপর্বের সাথে কোডটি বিশৃঙ্খলা করার কোনও বিশদ কারণ দেখছি না std::- এটি কেবল ভিজ্যুয়াল শোরগোল হয়ে যায়। তবে, আপনি যদি stdনিজের কোডের নামস্থান থেকে পুরো গোছাটি নাম ব্যবহার না করে থাকেন তবে আমিও নির্দেশটি রেখে যেতে কোনও সমস্যা দেখছি না। এটি একটি টোটোলজি - যদি নির্দেশের প্রয়োজন না হয় তবে এটি ব্যবহার করার দরকার নেই।

একইভাবে, আপনি যদি নেমস্পেসে স্পিফিক ধরণের জন্য কয়েকটি ব্যবহার- বিবরণী ( নির্দেশ-নির্দেশের পরিবর্তে ) দিয়ে পেতে পারেন, তবে আপনার stdবর্তমান নামের জায়গাগুলিতে কেবল এই স্পেফিসিফিক নামগুলি না রাখার কোনও কারণ নেই। একই টোকেন দ্বারা, আমি মনে করি এটি পাগল হবে এবং বুককিপিংয়ের ঝামেলা 25 বা 30 ব্যবহারের-ঘোষণা থাকতে হবে যখন কোনও একক ব্যবহারের নির্দেশিকাও ঠিক সেই কৌশলটি করতে পারে।

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

template< typename T >
void foo( T& x, T& y)
{
    using std::swap;     // makes std::swap available in this function

    // do stuff...

    swap( x, y);         // will use a T-specific swap() if it exists,
                         //  otherwise will use std::swap<T>()

    // ...
 }

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

ভেষজ সুটার এবং আন্দ্রে আলেকজান্ড্রেসকুকে "আইটেম 59: - এ হেডারের ফাইলে বা তাদের বই, সি ++ কোডিং স্ট্যান্ডার্ডস: 101 টি নিয়ম, গাইডলাইন এবং সেরা অনুশীলনগুলির একটি # অন্তর্ভুক্ত" এর আগে নেমস্পেস ইউজিং লিখবেন না:

সংক্ষেপে: আপনি নির্দেশাবলীর পরে আপনার প্রয়োগকারী ফাইলগুলিতে উদারভাবে ঘোষণা এবং নির্দেশাবলী ব্যবহার করে নেমস্পেস ব্যবহার করতে পারেন এবং #includeএটি সম্পর্কে ভাল অনুভব করতে পারেন। এর বিপরীতে বারবার দাবি করা সত্ত্বেও, ঘোষণা এবং নির্দেশাবলী ব্যবহার করে নেমস্পেস খারাপ নয় এবং তারা নেমস্পেসের উদ্দেশ্যকে পরাভূত করে না। বরং, তারা হ'ল নেমস্পেসকে ব্যবহারযোগ্য করে তোলে।

"দ্য সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজ, তৃতীয় সংস্করণ" তে স্ট্রুপস্ট্রাপকে প্রায়শই বলা হয়, "গ্লোবাল নেমস্পেস দূষিত করবেন না"। তিনি আসলে এটি বলেছিলেন (সি .১৪ [১৫]), কিন্তু সি.১০.১ অধ্যায়টি উল্লেখ করেছেন যেখানে তিনি বলেছেন:

একটি ব্যবহার-বিবৃতি একটি স্থানীয় সুযোগে একটি নাম যুক্ত করে। একটি ব্যবহার-নির্দেশনা দেয় না; এটি কেবলমাত্র যে ক্ষেত্রগুলিতে ঘোষিত হয়েছিল সেগুলিতে নামগুলিকে অ্যাক্সেসযোগ্য রেন্ডার করে। উদাহরণ স্বরূপ:

namespaceX {
    int i , j , k ;
}

int k ;
void f1()
{
    int i = 0 ;

    using namespaceX ; // make names from X accessible

    i++; // local i
    j++; // X::j
    k++; // error: X::k or global k ?

    ::k ++; // the global k

    X::k ++; // X’s k
}

void f2()
{
    int i = 0 ;

    using X::i ; // error: i declared twice in f2()
    using X::j ;
    using X::k ; // hides global k

    i++;
    j++; // X::j
    k++; // X::k
}

স্থানীয়ভাবে ঘোষিত নাম (কোনও সাধারণ ঘোষণার মাধ্যমে বা কোনও ঘোষণার মাধ্যমে ঘোষিত) একই নামের অলৌকিক ঘোষণাকে আড়াল করে, এবং নামের কোনও অবৈধ ওভারলোডিং ঘোষণার স্থানে সনাক্ত করা হয়।

k++ইন জন্য অস্পষ্টতা ত্রুটি নোট করুন f1()। বিশ্বব্যাপী সুযোগগুলিকে অ্যাক্সেসযোগ্য করে দেওয়া নাম স্থানগুলির নামগুলির চেয়ে বিশ্বব্যাপী নামগুলিকে অগ্রাধিকার দেওয়া হয় না। এটি দুর্ঘটনাজনিত নাম সংঘর্ষের বিরুদ্ধে উল্লেখযোগ্য সুরক্ষা সরবরাহ করে এবং - গুরুত্বপূর্ণভাবে - তা নিশ্চিত করে যে বিশ্বব্যাপী নেমস্পেসকে দূষিত করার কোনও সুবিধা নেই।

নির্দেশাবলী ব্যবহারের মাধ্যমে অনেক নাম ঘোষণাকারী লাইব্রেরিগুলি অ্যাক্সেসযোগ্য হয়ে ওঠে, অব্যবহৃত নামগুলির সংঘর্ষকে ত্রুটি হিসাবে বিবেচনা করা হয় না এটি একটি গুরুত্বপূর্ণ সুবিধা।

...

আমি আশা করি traditionalতিহ্যবাহী সি এবং সি ++ প্রোগ্রামের তুলনায় নতুন জায়গাগুলিতে নেমস্পেস ব্যবহার করে বিশ্বব্যাপী নাম ব্যবহারের ক্ষেত্রে আমূল কমেছে see যে কেউ বিশ্বব্যাপী সুযোগকে দূষিত না করার বিষয়ে যত্ন নেয় সে সম্পর্কে বিশ্বব্যাপী নামের '' অলস '' ব্যবহারকারীর কোনও সুবিধা না দেওয়ার জন্য বিশেষ করে নাম স্থানগুলির নিয়মগুলি রচনা করা হয়েছিল।

এবং 'গ্লোবাল নামগুলির অলস ব্যবহারকারী' এর মতো একই সুবিধা কীভাবে পাওয়া যায়? ব্যবহারের দিকনির্দেশনার সুযোগ নিয়ে, যা নিরাপদে একটি নামস্থানে নামগুলি বর্তমান স্কোপে উপলব্ধ করে।

মনে রাখবেন যে এর মধ্যে একটি পার্থক্য রয়েছে - stdব্যবহারের নির্দেশের সঠিক ব্যবহারের সাথে (নির্দেশের পরে নির্দেশ রেখে #includes) নামের জায়গাগুলির নামগুলি বিশ্বব্যাপী নেমস্পেসকে দূষিত করে না । এটি কেবল এই নামগুলি সহজেই উপলব্ধ করে তুলেছে এবং সংঘর্ষের বিরুদ্ধে অবিচ্ছিন্ন সুরক্ষা দিয়ে।


আপনার শেষ পয়েন্টটির সাথে: জাভা এবং সি # এর আরও বেশি সুন্দর নেমস্পেস রয়েছে। ছাত্রলীগের সমস্ত কিছু যদি সিস্টেমে থাকত তবে "সিস্টেম ব্যবহার করা" "নেমস্পেস স্টাডি ব্যবহার" এর মতোই সমস্যার সৃষ্টি করতে পারে।
জেফ হার্ডি

তবে জাভা এবং সি # প্রোগ্রামগুলি যা আমি দেখতে পাই তারা সাধারণত ব্যবহার করে এমন সমস্ত নামস্থান নিয়ে আসে - কেবল "সিস্টেম" (বা এর সমতুল্য নয়)। সুতরাং একক ব্যবহারের নির্দেশের পরিবর্তে যা ব্যবহৃত সমস্ত নাম নিয়ে আসে, সেখানে 5 বা 10 রয়েছে যা কম বেশি একই জিনিস করে। এছাড়াও, "নেমস্পেস স্ট্যান্ড ব্যবহার করে"; সত্যিই এত ঝামেলা ঘটায়?
মাইকেল বারার

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

1
আমি এখনও নিশ্চিত নই যে এটি একটি বাস্তব-বিশ্বের সমস্যা। আমি দেখছি ব্যবহার-নির্দেশাবলী কঠোর ত্রুটিগুলি ছাড়াই সর্বদা ব্যবহৃত হয়। তারপরে আবার এগুলি ব্যবহার না করে আমার কোনও সমস্যা নেই । আমি কেবল পছন্দ করি যে std::কোয়ালিফায়াররা কোডটি বিশৃঙ্খলা না করে - এড়াতে যাওয়ার অন্যান্য উপায়ও রয়েছে (ব্যবহার-ঘোষণা বা টাইপডেফগুলি সাধারণত কৌশলটি করেন)।
মাইকেল বুড়

1
@ প্রোগ্রামার: আপনি বলেছেন, "তালিকাটি একটি লিস্প ইন্টারপ্রেটারে তালিকা শনাক্ত করার জন্য একটি প্রাকৃতিক পরিচয়দাতা" - তবে " using namespace std;" নির্দেশনা থাকা আপনাকে আপনার প্রাকৃতিক শনাক্তকারী ' list' ঘোষণা করতে বাধা দেয় না - এটি ঠিক যদি আপনি করেন তবে আপনি পারবেন না std::listএটি যোগ্যতা ছাড়াই আর ব্যবহার করুন । কোনও using namespace std;নির্দেশনা না থাকলে এটি আলাদা নয় । নাকি আমি কিছু মিস করছি?
মাইকেল বারার

17

শিরোনাম ফাইলটিতে বিশ্বব্যাপী স্কোপে নেমস্পেস ব্যবহার করবেন না। এটি দ্বন্দ্বের দিকে পরিচালিত করতে পারে এবং যে ফাইলটির দ্বন্দ্ব দেখা দেয় সেখানে দায়িত্বে থাকা ব্যক্তির কারণের কোনও নিয়ন্ত্রণ নেই।

বাস্তবায়ন ফাইলে, পছন্দগুলি খুব কম কাটা হয়।

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

  • স্ট্যান্ড :: নাম ব্যবহার করে রাখা; অজানা প্রতীক আমদানির ঝুঁকি ছাড়াই লেখার সরলতার সুবিধা রয়েছে। ব্যয়টি হ'ল আপনাকে স্পষ্টত সমস্ত প্রতীক প্রতীক আমদানি করতে হবে।

  • স্পষ্টতভাবে যোগ্যতা অর্জন করলে কিছুটা বিশৃঙ্খলা যুক্ত হয় তবে আমি মনে করি যে এটি কিছু অনুশীলনকে কম ঝামেলা করবে।

আমার প্রকল্পে, আমি সমস্ত নামের জন্য সুস্পষ্ট যোগ্যতা ব্যবহার করি, আমি std :: নাম ব্যবহার করে গ্রহণ করি, নেমস্পেস স্টাডি ব্যবহার করার বিরুদ্ধে লড়াই করি (আমাদের কাছে একটি লিস্প ইন্টারপ্রেটার রয়েছে যার নিজস্ব তালিকার ধরণ রয়েছে এবং তাই দ্বন্দ্ব একটি নিশ্চিত বিষয়)।

অন্যান্য নেমস্পেসগুলির জন্য, আপনাকে ব্যবহৃত নামকরণ কনভেনশনগুলিও বিবেচনায় রাখতে হবে। আমি এমন একটি প্রকল্প জানি যা নেমস্পেস (সংস্করণকরণের জন্য) এবং নামের উপর উপসর্গ ব্যবহার করে। এরকম একটি using namespace Xতারপর প্রায় ঝুঁকি ছাড়াই এবং এটি করছেন না মূঢ় খুঁজছেন কোড বাড়ে PrefixNS::pfxMyFunction(...)

কিছু ক্ষেত্রে রয়েছে যেখানে আপনি প্রতীকগুলি আমদানি করতে চান। std :: swap সবচেয়ে সাধারণ ক্ষেত্রে: আপনি std :: swap আমদানি করেন এবং তারপরে অদলবদল অদলবদল ব্যবহার করুন। আর্গুমেন্ট নির্ভর নির্ভরপ্রবণতা যদি থাকে তবে টাইপের নামস্থানে পর্যাপ্ত অদলবদল খুঁজে পাবেন এবং যদি কিছু না থাকে তবে স্ট্যান্ডার্ড টেমপ্লেটে ফিরে যান।


সম্পাদনা:

মন্তব্যে মাইকেল বুড় বিস্মিত হয়েছিলেন যে সত্যিকারের বিশ্বে দ্বন্দ্বগুলি ঘটে occur এখানে একটি বাস্তব লাইভ উদাহরণ। আমাদের একটি এক্সপেনশন ভাষা রয়েছে যার সাথে একটি লিস্প ডায়ালেক্ট। আমাদের দোভাষীর একটি অন্তর্ভুক্ত ফাইল রয়েছে, lisp.h রয়েছে

typedef struct list {} list;

আমাদের কিছু কোড সংহত করতে এবং অভিযোজিত করতে হয়েছিল (যার নাম আমি "ইঞ্জিন" রাখব) যা দেখতে এরকম দেখাচ্ছে:

#include <list>
...
using std::list;
...
void foo(list const&) {}

সুতরাং আমরা এটির মতো পরিবর্তন করেছি:

#include <list>

#include "module.h"
...
using std::list;
...
void foo(list const&) {}

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


1
নিয়ন্ত্রিত ক্ষেত্রে যেখানে আমি মনে করি নেমস্পেসটি গ্রহণযোগ্য বলে মনে হয় তার একটি প্রকাশনা কোড। সরলকরণ পৃষ্ঠার বিন্যাসকে সহজতর করে এবং উন্মুক্ত বিন্দুতে মনোনিবেশ করতে সহায়তা করে। অসুবিধাটি হ'ল এটি সত্যিই একটি ভাল অনুশীলন প্রদর্শন করে না, তাই আমি এটি আরম্ভের জন্য বইগুলিতে ব্যবহার করব না।
এপ্রোগ্রামার

1
আমি মনে করি স্টাডি :: টাইপ করা স্বচ্ছতার জন্য মূল্য দিতে একটি ছোট দাম
পাওলোরিকার্ডো

4
@ পাওলোরিকার্ডো: অন্যদিকে, আমি মনে করি যে সমস্ত জায়গা জুড়ে স্টাডি :: দেখা অপ্রয়োজনীয় ভিজ্যুয়াল গন্ডগোল is
মাইকেল বুড়

1
@ মিশেল: আপনি আপনার অর্থ প্রদান করেন এবং আপনি নিজের পছন্দ করুন!
paoloricardo

2
আপনি যে সমস্যার মধ্যে এসেছিলেন তার বিশদ যুক্ত করতে সময় দেওয়ার জন্য ধন্যবাদ Thanks
মাইকেল বুড়

4

আপনার স্টাডি এবং অন্যান্য গ্রন্থাগারগুলির সাথে আপনার কোডে নাম দ্বন্দ্বের ঝুঁকি না থাকলে আপনি ব্যবহার করতে পারেন:

using namespace std;

তবে আপনি যদি ডকুমেন্টেশনের জন্য আপনার কোডের নির্ভরতা অবিকল জানতে চান বা অন্যভাবে নাম বিরোধের ঝুঁকি রয়েছে:

using std::string;
using std::cout;

তৃতীয় সমাধান, এই সমাধানগুলি ব্যবহার করবেন না এবং স্টাড :: লিখুন কোডের প্রতিটি ব্যবহারের আগে আপনাকে আরও সুরক্ষা এনে দেয় তবে সম্ভবত কোডে কিছুটা ভারী হওয়া ...


4

উভয়

using std::string;

এবং

using namespace std;

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

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


3

আমার জন্য, আমি ::যখন সম্ভব তখন ব্যবহার করতে পছন্দ করি ।

std::list<int> iList;

আমি লিখতে ঘৃণা করি:

for(std::list<int>::iterator i = iList.begin(); i != iList.end(); i++)
{
    //
}

আশা করি, C ++ 0x দিয়ে আমি এটি লিখব:

for(auto i = iList.begin(); i != iList.end(); i++)
{
    //
}

যদি নেমস্পেসটি খুব দীর্ঘ হয়,

namespace dir = boost::filesystem;

dir::directory_iterator file("e:/boost");
dir::directory_iterator end;

for( ; file != end; file++)
{
    if(dir::is_directory(*file))
        std::cout << *file << std::endl;
}

@ আরাক: নেমস্পেস দির = বুস্ট :: ফাইল সিস্টেম; আমার ধারণা এটি একটি উপনাম?
paoloricardo

@ পাওলোরিকার্ডো: হ্যাঁ এটি কী তাই!
এসবিআই

2
আইট্রেটারগুলি বর্ধিত করা উচিত ++i, i++কারণ এটি এমনকি যদি এটি সংজ্ঞায়িত করা হয় তবে পুনরুক্তকারীর একটি অপ্রয়োজনীয় অস্থায়ী অনুলিপি তৈরি করে।
ফেলিক্স ডমবাক

2

using namespace stdশিরোনামে আপনার কখনই নেমস্পেসের সুযোগ থাকা উচিত নয় । এছাড়াও, আমি মনে করি বেশিরভাগ প্রোগ্রামাররা তারা দেখবে vectorবা stringনা দেখলে আশ্চর্য হয়ে যাবে std::, তাই আমার মনে using namespace stdহয় এর চেয়ে ভাল হয় না । এর জন্য আমি তর্ক করি না কখনই মোটেও না using namespace std

আপনার যদি মনে হয় তবে অবশ্যই এই জাতীয় ঘোষণার সাহায্যে স্থানীয় যুক্ত করুন using std::vector। তবে নিজেকে জিজ্ঞাসা করুন: এর মূল্য কী? কোডের একটি লাইন একবারে লেখা হতে পারে (সম্ভবত দ্বিগুণ) তবে এটি দশ, একশ বা হাজারবার পড়া হয়েছে। সংরক্ষিত টাইপিংয়ের প্রচেষ্টাটি কোডটি পড়ার চেষ্টার তুলনায় একটি প্রজ্ঞাপন বা নির্দেশের ব্যবহার যুক্ত করা প্রান্তিক।

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

আমি দেখতে পেয়েছি যে সাধারণত, যারা নিষেধাজ্ঞার বিরোধিতা করেন তারা usingসাধারণত একটি প্রকল্পের জন্য চেষ্টা করেননি। যারা চেষ্টা করেছেন তারা প্রায়শই খুব অল্প সময়ের পরে দিকনির্দেশনা / ঘোষণাগুলি ব্যবহার করার চেয়ে ভাল বলে মনে করেন।

দ্রষ্টব্য: কেবলমাত্র ব্যতিক্রমটি using std::swapযা প্রয়োজন (বিশেষত জেনেরিক কোডে) এর ওভারলোডগুলি নেমস্পেসে swap()রাখা যায় না std(কারণ আমাদের stdএই নামস্থানে ফাংশনগুলির ওভারলোডগুলি রাখার অনুমতি নেই )।


3
স্ট্যান্ড :: অদলবদলের একটি বিশেষীকরণ একটি সম্পূর্ণ বিশেষীকরণ হবে - আপনি ফাংশন টেম্পলেটগুলিকে আংশিকভাবে বিশেষজ্ঞ করতে পারবেন না। কোন প্রোগ্রাম হয় আংশিকভাবে এতক্ষণ যে বিশেষজ্ঞতা একটি ব্যবহারকারী-সংজ্ঞায়িত ধরনের উপর নির্ভর করে কোনো মান গ্রন্থাগার টেমপ্লেট বিশেষজ্ঞ অনুমতি দেওয়া।
সিবি বেইলি

@ চার্লস: হ্যাঁ, আপনি ঠিক বলেছেন, অবশ্যই এফটিপিএস নেই। এবং আমি এর মধ্যে টেমপ্লেটগুলিকে বিশেষায়িত করতে পারি stdতবে ওভারলোড নয়। এই মস্তিষ্কের জন্য দুঃখিত। আমি পোস্ট সংশোধন করব।
এসবিআই

2
আমি মনে করি না using namespaceনির্দেশের উদ্দেশ্যটি ছিল টাইপিং করা; পরিবর্তে, এটি পড়া সহজ করা ছিল, কারণ আপনি যেমনটি বলেছেন, সেই কোডটি কয়েক ডজন, কয়েকশো বা কয়েক হাজার বার পড়তে হবে। এবং কিছু লোকের জন্য, কম বিশৃঙ্খলা সহ এটি আরও সহজে পড়া হয় std::। তবে এটি সম্ভবত ব্যক্তিগত উপলব্ধি ক্ষমতা নেমে আসে; কিছু লোক ফিল্টার std::সরিয়ে ফেলে বা এমনকি গাইডেন্সের জন্য এটির প্রয়োজন হয় (সেরিফগুলির মতো), অন্যরা এটি আটকে ফেলে এবং একগুঁয়ে রাস্তার মতো অনুভব করে।
লুমি


1
@ এসবিআই: না, এটি উদ্দেশ্যমূলক নয়। আপনি std :: সহায়ক, বা বিশৃঙ্খলা বলে মনে করেন এটি নির্ভর করে। আরও বিশৃঙ্খলা -> স্বচ্ছতা কম।
জোশুয়া রিচার্ডসন

2

ফাংশন স্বাক্ষরের বিভ্রান্তিদূষণ রোধে নেমস্পেসগুলি কোড ধারণ করে ।

যথাযথ নেমস্পেস ব্যবহারের একটি সম্পূর্ণ এবং নথিভুক্ত ডেমো এখানে :

#include <iostream>
#include <cmath>  // Uses ::log, which would be the log() here if it were not in a namespace, see /programming/11892976/why-is-my-log-in-the-std-namespace

// Silently overrides std::log
//double log(double d) { return 420; }

namespace uniquename {
    using namespace std;  // So we don't have to waste space on std:: when not needed.

    double log(double d) {
        return 42;
    }

    int main() {
        cout << "Our log: " << log(4.2) << endl;
        cout << "Standard log: " << std::log(4.2);
        return 0;
    }
}

// Global wrapper for our contained code.
int main() {
    return uniquename::main();
}

আউটপুট:

Our log: 42
Standard log: 1.43508

1

using namespace stdstdবর্তমানের একটিতে নেমস্পেসের সামগ্রী আমদানি করে । সুতরাং, সুবিধাটি হ'ল আপনাকে std::সেই নেমস্পেসের সমস্ত ফাংশনের সামনে টাইপ করতে হবে না । যাইহোক, এটি ঘটতে পারে যে আপনার বিভিন্ন নামের জায়গাগুলি একই নামের ফাংশন রয়েছে। সুতরাং, আপনি নিজের পছন্দ মতো কল না করেই শেষ করতে পারেন।

আপনি কোনটি আমদানি করতে চান তা ম্যানুয়ালি সুনির্দিষ্ট করে stdতা ঘটতে বাধা দেয় তবে আপনার ফাইলের শুরুতে এটি ব্যবহারের দীর্ঘ তালিকা হতে পারে, যা কিছু বিকাশকারী কুৎসিত পাবেন;)!

ব্যক্তিগতভাবে, আমি যখনই কোনও ফাংশন ব্যবহার করি প্রতিবার নেমস্পেস নির্দিষ্ট করে দেওয়া পছন্দ করি, নামস্থানটি দীর্ঘ না হওয়া ব্যতীত, সেক্ষেত্রে আমি ফাইলটির শুরুতে কিছুটা রেখেছি।

সম্পাদনা: অন্য উত্তরে যেমন উল্লিখিত হয়েছে, আপনাকে কখনও using namespaceএকটি হেডার ফাইলে রাখা উচিত নয় , কারণ এটি এই শিরোলেখ সহ সমস্ত ফাইলে প্রচার করবে এবং এভাবে অযাচিত আচরণ তৈরি করতে পারে।

সম্পাদনা 2: আমার উত্তর সংশোধন করে, চার্লসের মন্তব্যে ধন্যবাদ।


2
using namespace std;stdবিশ্বব্যাপী নেমস্পেসে নেমস্পেসের বিষয়বস্তু আমদানি করে । এটি ডিফল্ট নেমস্পেস পরিবর্তন করে না। একটির পরে গ্লোবাল নেমস্পেসে কোনও কিছু সংজ্ঞায়িত করা যাদুকরিভাবে নামস্থানতে using namespace stdরাখবে না std
সিবি বেইলি

দুঃখিত, এটি আমি বোঝাতে চাইছিলাম না। এটি উল্লেখ করার জন্য ধন্যবাদ, আমি আমার উত্তরটি সংশোধন করব।
Wookai

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

1
উদ্ধৃতি (যখন নামস্থানটি দীর্ঘ হবে তখন বাদে)। আপনি সেখানে সহায়তা করতে নেমস্পেস এলিয়জিং ব্যবহার করতে পারেন। 'নেমস্পেস আরভি 1 = থর :: এক্সএমএল :: এক্সপথ :: বিধি :: হালকা :: সংস্করণ 1;' উপনামগুলি নোট করুন এবং উভয়ই স্কোপিংয়ের নিয়ম মেনে চলেন;
মার্টিন ইয়র্ক

0

অনেকটা জাভাতে যেমন আপনি ব্যবহার করতে পারেন সেখানে java.util অন্তর্ভুক্ত থাকতে পারে * * বা প্রতিটি শ্রেণি পৃথকভাবে নির্বাচন করুন এটি স্টাইলের উপর নির্ভর করে। নোট করুন যে আপনি using namespace stdআপনার ফাইল / প্রশস্ত সুযোগের শুরুতে একটিটি চান না কারণ আপনি নামের স্থানটিকে দূষিত করবেন এবং সম্ভবত সংক্ষিপ্ত বিবরণ হবে, নামস্থানটির বিন্দুটি পরাস্ত করে। তবে আপনার যদি এমন কোনও ফাংশন থাকে যা প্রচুর এসটিএল ব্যবহার করে, এটি আপনার যুক্তিতে প্রিফিক্সিং সিনট্যাক্সের ঝাঁকুনির জন্য কোডকে বিশৃঙ্খলাবদ্ধ করে তোলে এবং আপনার সম্ভবত হয় using namespace std(বিভিন্ন শ্রেণির ব্যবহার করার সময়) বা স্বতন্ত্র usingএস (কয়েকটি ব্যবহার করার সময় ) ব্যবহার করা বিবেচনা করা উচিত ক্লাস প্রায়ই)।


0

আপনি যে আইডিই দিয়ে কাজ করছেন এটি আপনার প্রয়োজনীয় তথ্য প্রদর্শন বা আড়াল করার পক্ষে যথেষ্ট নমনীয় না হওয়া পর্যন্ত এই আলোচনাটি সজীব হতে চলেছে।

কারণ আপনার কোডটি আপনার মতো দেখতে কী চান তা হাতের কাজটির উপর নির্ভর করে।

আমার সোর্স কোডটি তৈরি করার সময়, আমি ঠিক কোন ক্লাসটি ব্যবহার করছি তা দেখতে পছন্দ করি: এটি std::string, না BuzFlox::Obs::stringক্লাস?

নিয়ন্ত্রণ প্রবাহ ডিজাইন করার সময়, আমি ভেরিয়েবলের ধরণের বিষয়েও আগ্রহী নই, তবে আমি if'গুলি এবং এর while' এর দিকে মনোনিবেশ করতে চাই continue

সুতরাং এটি আমার পরামর্শ:

আপনার কোডের শ্রোতাদের উপর নির্ভর করে এবং আপনার সরঞ্জামগুলির শক্তির উপর নির্ভর করে যেভাবে হয় সবচেয়ে সহজ পড়বে বা সর্বাধিক তথ্য দেয় সেই উপায়টি চয়ন করুন।


0

এটি ঠিক করার বিভিন্ন উপায় রয়েছে।

প্রথম: আপনি যা করেছেন তেমন ব্যবহার করুন।

দ্বিতীয়: কর namespace S = std;, 2 অক্ষর হ্রাস।

তৃতীয়: ব্যবহার static

চতুর্থ: যে নাম ব্যবহার করে সেগুলি stdব্যবহার করবেন না ।


-1

প্রতিটি আগপাছ কি হয়

স্ট্যান্ডার্ড ছাড়ার একমাত্র কারণ: আপনি তাত্ত্বিকভাবে, সমস্ত এসটিএলকে নিজেরাই কাজ করতে পারেন। তারপরে আপনার ফাংশনগুলি std :: ভেক্টর ব্যবহার করে আমার :: ভেক্টরে কোড পরিবর্তন না করে পরিবর্তন করা যেতে পারে।


নাম স্থানগুলি সত্যিকার অর্থে আলাদা, তবে সমমানের, কার্যকারিতা সহ নামের প্রতিস্থাপনের অনুমতি দেওয়ার জন্য ডিজাইন করা হয়নি। এগুলি অনিচ্ছাকৃত নামের সংঘর্ষ প্রতিরোধের জন্য ডিজাইন করা হয়েছে।
মাইকেল বারার

হ্যাঁ, সুতরাং এটি 'ব্রেকিং' নির্দেশের একমাত্র ন্যায়সঙ্গততা যা এটি ভঙ্গ করে তা আপনাকে কোনও নতুন নেমস্পেসে ফাংশনগুলি স্যুইচ করার অনুমতি দেয়।
মার্টিন বেকেট

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

আমি মনে করি "ব্যবহার করা" এর উদ্দেশ্য আপনাকে 3 অক্ষর টাইপ করার পরিবর্তে বিকল্প বাস্তবায়নে স্যুইচ করার অনুমতি দেওয়া হয়েছিল allow আমি "স্টাডি :: ফু" ব্যবহার করতে পছন্দ করি কারণ এটি প্রোগ্রামারটির সাথে চুক্তি হিসাবে কাজ করে যা আমি সাধারণ ফু ব্যবহার করছি এবং তাদের চেক করতে হবে না। আমি সম্মত হই যে আমি "com.microsoft.visual-studio.standard-library.numbers.int foo" টাইপ করতে চাই না, এসটিএলে কিছু পুনরাবৃত্তি ঘোষণাগুলি এর মতো পাওয়া যায়। পাইথন আপনাকে মডিউলগুলি থেকে সজ্জিত বা অকার্যকর সেটগুলিতে টানতে দেয় এমন এক দুর্দান্ত কাজ করে।
মার্টিন বেকেট

-1

উদাহরণস্বরূপ না কেন

typedef std::vector<int> ints_t;
ints_t ints1;
....
ints_t ints2;

পরিবর্তে অকার্যকর

std::vector<int> ints1;
...
std::vector<int> ints2;

আমি আরও অনেক বেশি পাঠযোগ্য এবং কোডিংয়ের জন্য এটি আমার মান খুঁজে পাই।

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

void getHistorgram(std::vector<unsigned int>&, std::vector<unsigned int>&);

কোনটি ফেরতের মূল্য?

পরিবর্তে কিভাবে সম্পর্কে

typedef std::vector<unsigned int> values_t;
typedef std::vector<unsigned int> histogram_t;
...
void getHistogram(values_t&, histogram_t&); 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.