সি ++ 11 এ কোন ব্রেকিং পরিবর্তন চালু করা হয়েছে?


227

আমি জানি যে সি ++ 11 এর মধ্যে অন্তত একটি পরিবর্তন যা কিছু পুরানো কোড সংকলন বন্ধ করে দেবে: explicit operator bool()স্ট্যান্ডার্ড লাইব্রেরিতে প্রবর্তন, এর পুরানো উদাহরণগুলির পরিবর্তে operator void*()। মঞ্জুর, এটি যে কোডটি ভেঙে দেবে সম্ভবত এটি এমন কোড যা প্রথমে বৈধ হওয়া উচিত ছিল না তবে এটি এখনও একটি ব্রেকিং পরিবর্তন হয়েছে: যে প্রোগ্রামগুলির বৈধতা ছিল তা আর নেই।

অন্য কোন ব্রেকিং পরিবর্তন আছে?


1
exportকীওয়ার্ডটির অর্থ সরিয়ে ফেলছেন ? আমি আমার কোট আনব।
স্টিভ জেসোপ

7
আপনি জানেন, আমি এটিকে রূপান্তর-থেকে-বুলকে "ব্রেকিং চেঞ্জ" হিসাবে পরিবর্তন বলব না ... আরও একটি "শাস্তি দেওয়ার পরিবর্তনের" মত।
Xeo

4
যখন এই জাতীয় ইউনিয়ন তৈরি করার জন্য প্রয়োজনীয় সমস্ত কাগজপত্র কেবল রাবারের স্ট্যাম্পের জন্য অপেক্ষা করছে, নিশ্চিত, কেন নয়?
ডেনিস জিকিফুজ

3
@ শিও: এর mystream.good()মতো নয় bool(mystream)? good()কোনও পতাকা সেট না করা থাকলে এটি সত্য। bool(mystream)এখনও eofbitসেট করা থাকলেও এটি মিথ্যা । !mystream.fail()সঠিক সমতুল্য হবে।
আর মার্টিনহো ফার্নান্দিস

2
মডারেটর দ্রষ্টব্য : " দয়া করে প্রশ্নে বা উত্তরটি হাতে নিয়ে মন্তব্যটি রাখুন a কোন প্রশ্ন বা উত্তর নিয়ে আলোচনা করার সময়, আলোচনাটি ঠিক সেইরকম হওয়া উচিত, প্রশ্ন বা উত্তরটি হাতের কাছে। বৈষম্য অবশ্যই নয় is "
টিম পোস্ট

উত্তর:


178

এফডিআইএসের অসঙ্গতিগুলির জন্য একটি বিভাগ রয়েছে, পরিশিষ্ট C.2"সি ++ এবং আইএসও সি ++ 2003" এ রয়েছে।

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

কয়েকটি গ্রন্থাগার-সম্পর্কিত অসঙ্গতি রয়েছে যেখানে আমি এর প্রভাবগুলি সম্পর্কে ঠিক জানি না, তাই আমি সেগুলি অন্যদের জন্য বিশদভাবে রেখে দেই।

মূল ভাষা


#define u8 "abc"
const char *s = u8"def"; // Previously "abcdef", now "def"

#define _x "there"
"hello"_x // now a user-defined-string-literal. Previously, expanded _x .

নতুন কীওয়ার্ড: অ্যালাইনাস, অ্যালাইনফ, চর 16_t, চার32_t, কনটেক্সপ্রপ্র, ডিক্লাইপ, নেক্সটপ্রেস, নাল্পটার, স্ট্যাটিক_সেটর এবং থ্রেড_লোকাল


দীর্ঘ দ্বারা প্রতিনিধিত্ব করা যেতে পারে এর চেয়ে বড় কিছু পূর্ণসংখ্যার অক্ষর একটি স্বাক্ষরবিহীন পূর্ণসংখ্যা টাইপ থেকে স্বাক্ষরিত দীর্ঘ দীর্ঘ হতে পারে।


বৈধ সি ++ 2003 কোড যা পূর্ণসংখ্যার বিভাগকে 0 এর দিকে বা নেতিবাচক অসীমের দিকে ঘিরে দেয়, যখন সি ++ 0x সর্বদা ফলাফলকে 0 এর দিকে গোল করে।

(স্বীকার করা সত্যিই বেশিরভাগ লোকের পক্ষে সামঞ্জস্যের সমস্যা নয়)।


বৈধ সি ++ 2003 কোড যা autoস্টোরেজ শ্রেণীর নির্দিষ্টকরণকারী হিসাবে কীওয়ার্ডটি ব্যবহার করে সেটি সি ++ 0x এ অবৈধ হতে পারে।


সংকীর্ণ রূপান্তরগুলি C ++ 03 এর সাথে অসঙ্গতি সৃষ্টি করে। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি সি ++ 2003 এ বৈধ তবে এই আন্তর্জাতিক স্ট্যান্ডার্ডটিতে অবৈধ কারণ ডাবল টু ইন্ট সংকীর্ণ রূপান্তর:

int x[] = { 2.0 };

সুস্পষ্টভাবে ঘোষিত বিশেষ সদস্য ক্রিয়াকলাপগুলি মুছে ফেলা হিসাবে মুছে ফেলা হয় যখন অন্তর্নিহিত সংজ্ঞাটি খারাপ-গঠিত হত।

একটি বৈধ সি ++ 2003 প্রোগ্রাম যা সংজ্ঞায়নের প্রয়োজন হয় না এমন প্রসঙ্গে এই বিশেষ সদস্য ফাংশনগুলির মধ্যে একটি ব্যবহার করে (উদাহরণস্বরূপ, কোনও এক্সপ্রেশনে যার সম্ভাব্য মূল্যায়ন হয় না) অসুস্থ হয়ে পড়ে becomes

আমার উদাহরণ:

struct A { private: A(); };
struct B : A { };
int main() { sizeof B(); /* valid in C++03, invalid in C++0x */ }

এই জাতীয় আকারের কৌশলগুলি কিছু SFINAE ব্যবহার করেছে এবং এখনই এটি পরিবর্তন করা দরকার :)


ব্যবহারকারী-ঘোষিত ডেস্ট্রাক্টরগুলির একটি অন্তর্নিহিত ব্যতিক্রম বিশদ রয়েছে।

আমার উদাহরণ:

struct A {
  ~A() { throw "foo"; }
};

int main() { try { A a; } catch(...) { } }

এই কোডটি terminateসি ++ 0x এ কল করে, তবে সি ++ 03 এ নয়। কারণ A::~Aসি ++ 0 এক্স এর অন্তর্নিহিত ব্যতিক্রম স্পেসিফিকেশন noexcept(true)


একটি বৈধ সি ++ 2003 ঘোষণা exportসি ++ 0 এক্স-এ দূষিত।


>অন্যের সাথে সাথে অনুসরণযোগ্য একটি বৈধ সি ++ 2003 এক্সপ্রেশনটি >এখন দুটি টেমপ্লেট বন্ধ করে হিসাবে বিবেচিত হতে পারে।

সি ++ এ, >>সর্বদা শিফট-অপারেটর টোকেন হবে।


অভ্যন্তরীণ সংযোগ সহ ফাংশনগুলির নির্ভরশীল কলগুলিকে মঞ্জুরি দিন।

আমার উদাহরণ:

static void f(int) { }
void f(long) { }

template<typename T>
void g(T t) { f(t); }

int main() { g(0); }

সি ++ এ, এই কলগুলি f(long), কিন্তু সি ++ 0 এক্সে, এই কলগুলি f(int)। এটি লক্ষ করা উচিত যে সি ++ 03 এবং সি ++ 0 এক্স উভয় ক্ষেত্রেই নিম্নলিখিত কলগুলি f(B)(ইনস্ট্যান্টেশন প্রসঙ্গে এখনও কেবলমাত্র বাহ্যিক সংযোগের ঘোষণাগুলি বিবেচনা করে)।

struct B { };
struct A : B { };

template<typename T>
void g(T t) { f(t); }

static void f(A) { }
void f(B) { }

int main() { A a; g(a); }

এর চেয়ে ভাল মিলটি f(A)নেওয়া হয় নি, কারণ এতে বাহ্যিক সংযোগ নেই।


লাইব্রেরি পরিবর্তন

বৈধ সি ++ 2003 কোড যা সি ++ 0 এক্স এর সি ++ স্ট্যান্ডার্ড লাইব্রেরিতে যুক্ত কোনও শনাক্তকারী ব্যবহার করে এই আন্তর্জাতিক স্ট্যান্ডার্ডটিতে বিভিন্ন ফলাফল সংকলন করতে বা উত্পাদন করতে ব্যর্থ হতে পারে।


বৈধ সি ++ 2003 কোড যা #includesনতুন সি ++ 0x স্ট্যান্ডার্ড লাইব্রেরির শিরোনামগুলির নাম সহ এই আন্তর্জাতিক মানকটিতে অবৈধ হতে পারে।


বৈধ সি ++ 2003 কোডটি যা স্ব্যাপের মধ্যে থাকা আশা করে সংকলিত হয়েছে তার <algorithm>পরিবর্তে অন্তর্ভুক্ত থাকতে পারে<utility>


বিশ্বব্যাপী নেমস্পেস posixএখন মানীকরণের জন্য সংরক্ষিত।


বৈধ সি ++ 2003 কোডটি সংজ্ঞায়িত override, final, carries_dependency, অথবা noreturnম্যাক্রো যেমন সি ++ 0x মধ্যে অবৈধ।


"অভ্যন্তরীণ সংযোগের সাথে ফাংশনগুলির নির্ভরশীল কলগুলিকে মঞ্জুরি দিন" " আপনি দয়া করে আপনার দুটি উদাহরণের মধ্যে পার্থক্যটি বিস্তারিতভাবে বর্ণনা করতে পারেন? আমি স্পষ্টত কিছু মিস করছি।
ডেনিস জিকিফুজ

@Dennis পরিবর্তন প্রবর্তন করেন open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#561 । যদিও তারা এই বিষয়ে মন্তব্য করেন না, তবুও "ইনস্ট্যান্টেশন প্রসঙ্গে" কেবলমাত্র "একই অনুবাদ ইউনিটে টেমপ্লেট বিশেষায়নের তাত্ক্ষণিকতার আগে ঘোষিত বাহ্যিক সংযোগের সাথে ঘোষণার সেট" থাকে consists সুতরাং তারা যে পরিবর্তন করেছে তা সংজ্ঞা প্রসঙ্গে কেবল চেহারা প্রভাবিত করে।
জোহানেস স্কাউব - লিটব

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

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

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

28

অটো কীওয়ার্ডটির অর্থ পরিবর্তিত হয়েছে।


9
আপনি যদি autoকীওয়ার্ডটি ব্যবহার করে থাকেন তবে কিছু আপনার কোডের সাথে খুব ভুল। পৃথিবীতে কেন আপনি এটি ব্যবহার করবেন?
এলাজার লাইবোভিচ

এটি কোনও ব্রেকিং পরিবর্তন নয় । প্রতিটি বৈধ সি ++ 03 ব্যবহারের autoসি ++ 11 এ বৈধ থাকে।
ড্রু ডোরম্যান

11
@ ড্রুডোরম্যান int main() { auto int i = 0; return i; }পুরোপুরি বৈধ সি ++ 03, তবে সি ++ 11 এ একটি বাক্য গঠন ত্রুটি। সি ++ 03 মোডে এর জন্য দেওয়ার জন্য আমি কেবলমাত্র সতর্কতা হ'ল সামঞ্জস্যতা সম্পর্কে একটি সতর্কতা।

24

ব্রেকিং পরিবর্তন?

ওয়েল, এক জিনিস, যদি আপনি ব্যবহার decltype, constexpr, nullptr, ইত্যাদি শনাক্তকারী হিসাবে তারপর আপনি কষ্ট হতে পারে ...


21

কিছু মূল অসম্পূর্ণতা যা অসম্পূর্ণতা বিভাগ দ্বারা আচ্ছাদিত নয়:


সি ++ 0x ইঞ্জেকশন করা শ্রেণীর নামটিকে একটি টেম্পলেট হিসাবে বিবেচনা করে, যদি নামটি কোনও টেম্পলেট টেম্পলেট প্যারামিটারে আর্গুমেন্ট হিসাবে প্রেরণ করা হয়, এবং যদি এটি কোনও টেম্পলেট টাইপ প্যারামিটারে পাস করা হয় তবে টাইপ হিসাবে।

বৈদ্যুতিন সি ++ 03 কোডটি অন্য পরিস্থিতিতে আচরণ করতে পারে যদি এটি ইনজেকশনের শ্রেণীর নামের উপর নির্ভর করে এই পরিস্থিতিতে এই ক্ষেত্রে সর্বদা এক প্রকার হতে পারে। আমার ঝাঁকুনির PR থেকে নেওয়া উদাহরণ কোড

template<template<typename> class X>
struct M { };

template<template<typename> class X>
void g(int = 0); // #1

template<typename T>
void g(long = 0); // #2

template<typename T>
struct A {
  void f() {
    g<A>(); /* is ambiguous in C++0x */
    g<A>(1); /* should choose #1 in C++0x */
  }
};

void h() {
  A<int> a;
  a.f();
}

সি ++ 03 এ কোডটি দ্বিতীয় gবার দুটি কল করে ।


সি ++ 0x এমন কিছু নাম তৈরি করে যা সি ++ 03 এর উপর নির্ভরশীল ছিল এখন নির্ভরশীল হতে। এবং অ-নির্ভরশীল যোগ্য নামগুলির জন্য নামের সন্ধানের প্রয়োজন যা বর্তমান শ্রেণীর টেমপ্লেটের সদস্যদের তাত্ক্ষণিক সময়ে পুনরাবৃত্তি করা উচিত এবং যাচাইকরণের প্রয়োজন যে এই নামগুলি টেমপ্লেট সংজ্ঞা প্রসঙ্গে যেমন করা হয়েছে ঠিক তেমনিভাবে এটি অনুসন্ধান করে।

আধিপত্য নিয়মের উপর নির্ভর করে বৈধ সি ++ 03 কোড এই পরিবর্তনের কারণে এখন আর সংকলন করতে পারে না।

উদাহরণ:

struct B { void f(); };

template<typename T>
struct A : virtual B { void f(); };

template<typename T>
struct C : virtual B, A<T> {
  void g() { this->f(); }
};

int main() { C<int> c; c.g(); }

এই বৈধ সি ++ 03 কোড যা কল করে A<int>::fতা সি ++ 0 এক্সে বৈধ নয়, কারণ তাত্ক্ষণিকতার সময় নাম অনুসন্ধানের A<int>::fসাথে বিপরীত হিসাবে দেখা যাবে B::f, যা সংজ্ঞা-সংক্ষিপ্ত বিবরণের সাথে দ্বন্দ্ব সৃষ্টি করে।

এই মুহুর্তে, এটি এফডিআইএসের কোনও ত্রুটি কিনা তা পরিষ্কার নয়। কমিটি এটি সম্পর্কে সচেতন এবং পরিস্থিতি মূল্যায়ন করবে।


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

উদাহরণ:

struct A { protected: int B; };
typedef A B;

struct C : B {
  // inheriting constructor, instead of bringing A::B into scope
  using B::B;
};

int main() { C c; c.B = 0; }

উপরের উদাহরণ কোডটি সি ++ 03 তে সু-গঠিত, তবে সি ++ 0 এক্স-এ অসম্পূর্ণ, যেমনটি A::Bএখনও অ্যাক্সেসযোগ্য main


14

স্ট্রিম নিষ্কাশন ব্যর্থতা অন্যরকম চিকিত্সা করা হয়।

উদাহরণ

#include <sstream>
#include <cassert>

int main()
{
   std::stringstream ss;
   ss << '!';
   
   int x = -1;
   
   assert(!(ss >> x)); // C++03 and C++11
   assert(x == -1);    // C++03
   assert(x == 0);     // C++11
}

প্রস্তাব পরিবর্তন

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3246.html#23

স্ট্যান্ডার্ড রেফারেন্স

[C++03: 22.2.2.1.2/11]: পর্যায় 2 প্রক্রিয়াজাতকরণের ফলাফলগুলির মধ্যে একটি হতে পারে

  • চরের একটি ক্রম দ্বিতীয় ধাপে জমা হয়েছে scanfযা ধরণের ধরণের মানতে রূপান্তরিত হয় (বিধি অনুসারে ) val। এই মানটি সংরক্ষণ করা হয় valএবং এতে ios_base::goodbitসঞ্চিত থাকে err
  • দ্বিতীয় পর্যায়ে জমা হওয়া চরগুলির ক্রমটি scanfকোনও ইনপুট ব্যর্থতার কারণ হতে পারে। ios_base::failbitনিযুক্ত করা হয়েছে err[সম্পাদনা: কিছুই সংরক্ষণ করা হয় না val।]

[C++11: 22.4.2.1.2/3]: [..] সংরক্ষণ করা সংখ্যার মান এর মধ্যে একটি হতে পারে:

  • শূন্য, যদি রূপান্তর ফাংশন পুরো ক্ষেত্রটি রূপান্তর করতে ব্যর্থ হয়ios_base::failbitনিযুক্ত করা হয়েছে err
  • সর্বাধিক ধনাত্মক প্রতিনিধিত্বযোগ্য মান, যদি ক্ষেত্রটি প্রতিনিধিত্ব করতে খুব বড় ধনাত্মক মানের প্রতিনিধিত্ব করে valios_base::failbitনিযুক্ত করা হয়েছে err
  • স্বাক্ষরবিহীন পূর্ণসংখ্যার ধরণের ক্ষেত্রে সর্বাধিক নেতিবাচক প্রতিনিধিত্বযোগ্য মান বা শূন্য যদি ক্ষেত্রটি প্রতিনিধিত্ব করতে খুব বেশি negativeণাত্মক মান উপস্থাপন করে valios_base::failbitনিযুক্ত করা হয়েছে err
  • রূপান্তরিত মান, অন্যথায়।

ফলস্বরূপ সংখ্যার মানটি সংরক্ষণ করা হয় val

বাস্তবায়নের

  • জিসিসি 4.8 সি ++ 11 এর সঠিকভাবে আউটপুট দেয় :

    দৃser়তা `x == -1 'ব্যর্থ হয়েছে

  • নীচে সি ++ 03 এর জন্য সমস্ত আউটপুট জিসিসি 4.5-4.8 , যা কোনও বাগ হিসাবে উপস্থিত হবে:

    দৃser়তা `x == -1 'ব্যর্থ হয়েছে

  • সি ++ 03 এর জন্য ভিজ্যুয়াল সি ++ ২০০২ এক্সপ্রেস সঠিকভাবে আউটপুট:

    দৃ failed়তা ব্যর্থ হয়েছে: x == 0

  • ভিজ্যুয়াল সি ++ ২০১২ এক্সপ্রেস সি ++ ১১ এর জন্য ভুলভাবে আউটপুট দেয়, যা বাস্তবায়নের সমস্যা হিসাবে উপস্থিত হবে:

    দৃ failed়তা ব্যর্থ হয়েছে: x == 0


13

সুস্পষ্ট রূপান্তর অপারেটরদের ভূমিকা কীভাবে একটি ব্রেকিং পরিবর্তন? পুরানো সংস্করণটি এখনও আগের মতো "বৈধ" থাকবে।

হ্যাঁ, থেকে পরিবর্তন operator void*() constকরতে explicit operator bool() constএকটি অবিচ্ছিন্ন পরিবর্তন হবে, কিন্তু শুধুমাত্র যদি এটি একটি উপায় যে এবং তার মধ্যে আউট ভুল ব্যবহার করা হয়। কনফর্মিং কোডটি ভাঙা হবে না।

এখন, আরেকটি ব্রেকিং পরিবর্তন হ'ল সমষ্টিগত সূচনা চলাকালীন সংকীর্ণ রূপান্তর নিষিদ্ধ :

int a[] = { 1.0 }; // error

সম্পাদনা করুন : কেবল স্মরণকারী, std::identity<T>সি ++ 0x এ সরানো হবে (দ্রষ্টব্য দেখুন)। ধরণের নির্ভরশীল করে তোলার জন্য এটি একটি সুবিধা কাঠামো। যেহেতু স্ট্রাক্ট সত্যিই বেশি কিছু করে না, এটি এটি ঠিক করতে হবে:

template<class T>
struct identity{
  typedef T type;
};

যদি স্ট্যান্ডার্ড লাইব্রেরি অবজেক্টগুলিতে স্পষ্ট রূপান্তর যুক্ত হয় তবে বিদ্যমান অন্তর্নিহিত রূপান্তরগুলি কাজ করা বন্ধ করে দিতে পারে। তবে আমি এমন একটি দৃশ্য কল্পনা করতে পারি না যেখানে রূপান্তরটি বৈধ হবে না এবং দরকারী কিছু করতে পারে।
ডেনিস জিকিফুজ

ভূমিকাটি একটি ব্রেকিং পরিবর্তন কারণ এটি বিদ্যমানটির প্রতিস্থাপন করবে operator void*
আর মার্টিনহো ফার্নান্দেস

@ ডেনিস: আআআহ, আমি এখন দেখছি @ মার্টিনহো কী বোঝাতে চেয়েছিল? তবে এটি কেবলমাত্র ব্রেকিং পরিবর্তন হতে পারে যদি লোকেরা উদ্দেশ্য ছাড়া এটি ব্যবহার করে used
Xeo

"তবে কেবল যদি এটি নিজের মধ্যে এবং বাইরে ভুল উপায়ে ব্যবহার করা হয়" - bool ok = cin >> a; cout << "done reading" << endl; if (ok) { ... }C ++ 03 তে এর সাথে সত্যিকারের কোনও ভুল নেই, তবুও এটি সি ++ 11 এ ত্রুটি হয়ে গেছে। (দ্রষ্টব্য: জিসিসি 4.9 এখনো রয়েছে operator void*() constএখানে, যা কেন এটা সি ++ 11 মোডে কোড গ্রহণ হয়।)

std::identity<T>সি ++ 11 এ সরানো হয়নি, কারণ এটি সি ++ 03 এর অংশ ছিল না। এটি সি ++ 11 এর জন্য খসড়াটিতে সংক্ষেপে উপস্থিত ছিল এবং মানককরণের আগে খসড়া থেকে সরানো হয়েছিল।
হাওয়ার্ড হিন্যান্ট

8

কনটেইনার লাইব্রেরিতে এমন অনেকগুলি পরিবর্তন রয়েছে যা আরও কার্যকর কোডের অনুমতি দেয় তবে কয়েকটি কোণার ক্ষেত্রে নীরবে পিছনের দিকে সামঞ্জস্যতা ভঙ্গ করে।

উদাহরণস্বরূপ, std::vectorডিফল্ট নির্মাণ, সি ++ 0 এক্স এবং ব্রেকিং পরিবর্তনগুলি বিবেচনা করুন


7

অনগ্রসর পদক্ষেপের পিছনে সামঞ্জস্যতা ভঙ্গ করার বিষয়ে প্রচুর আলোচনা হয়েছে

( প্রাসঙ্গিক আলোচনার সাথে একটি পুরানো পৃষ্ঠা )

আপনি মন্তব্যগুলিতে পড়লে, অন্তর্নিহিত পদক্ষেপের রিটার্নও একটি ব্রেকিং পরিবর্তন।


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

@ ডেনিস: হ্যাঁ আপনার প্রশ্নটি ইতিমধ্যে জিজ্ঞাসা করা হয়েছিল, উত্তর দেওয়া হয়েছিল, এবং এই ফলোআপ পৃষ্ঠায়
বেন ভয়েগট

আহ্, মোবাইল পৃষ্ঠা মন্তব্যগুলি দেখায় নি। যে কোনও উপায়ে, এটি আরও কার্যকর লিঙ্ক ... প্রমিতকরণ প্রক্রিয়াটির odতিহাসিক অদ্ভুততা প্রাসঙ্গিক নয় (যদি আপনি এমএসভিসি ব্যবহার না করেন, তবে আমি বিশ্বাস করি যে এটি প্রথম খসড়াটি ব্যবহার করে)।
ডেনিস জিকিফুজ

@ ডেনিস: আমি মনে করি আপনি ঠিক বলেছেন আমার উত্তরে লিংকগুলি কিছুটা সরিয়ে নিয়েছে
বেন ভয়েগট

দুঃখজনকভাবে, cpp-next.com এর আর অস্তিত্ব নেই। ভবিষ্যতের রেফারেন্সের জন্য এগুলি হ'ল পৃষ্ঠাগুলি ওয়েব.আরচাইভ.আর্গ: সংরক্ষণিত পদক্ষেপের পিছনে সামঞ্জস্যতা এবং প্রাসঙ্গিক আলোচনার সাথে একটি পুরানো পৃষ্ঠা ভঙ্গ করে
ম্যাক্স ট্রুকসা

6
struct x {
   x(int) {}
};

void f(auto x = 3) { }

int main() {
   f();
}

সি ++ 03: বৈধ।

সি ++ 0x: error: parameter declared 'auto'


2
@ শিও: কোডটি সি ++ 03 তে বৈধ। এটি টাইপযুক্ত কোনও পরামিতি struct xএবং নাম নেই।
বেন ভয়েগট

আমি কাউকে আটকানোর আশা করছিলাম। আমি কেবলই চাই যে @ Xeo তার মন্তব্য মুছে ফেলার জন্য এত তাড়াতাড়ি না গিয়েছিল, কারণ আমি এটি পড়তে পারি নি!
অরবিট

@ শিও: ব্যাকরণটি আবিষ্কার না করেই আমি নিশ্চিত যে অটো কেবল একটি বৈধ কীওয়ার্ড নয়। যদি এটি হয় তবে এটি সম্ভবত আপনার প্রত্যাশার মতো কাজ করবে তবে সঠিকভাবে সংজ্ঞা দেওয়া সম্ভবত সত্যই কঠিন।
ডেনিস জিকিফুজ

আসুন শুধু বলি আপনি আমাকে ধরেছেন। এটি আক্ষরিকভাবে কাঠামো উপেক্ষা করে। :)
Xeo

@ তোমেলেক: সিও সঠিকভাবে জানিয়েছিল যে সি ++ 03 এর অন্তর্নিহিত কোন প্রকার নেই।
বেন ভয়েগট

-4

ভাষার বৈশিষ্ট্য সমূহ

  1. If using ব্যবহার করে ইউনিফর্ম এবং সাধারণ সূচনা
  2. স্বয়ংক্রিয়
  3. সংকীর্ণতা প্রতিরোধ
  4. constexpr
  5. লুপের জন্য ভিত্তিক ব্যাপ্তি
  6. nullptr
  7. এনাম ক্লাস
  8. static_assert
  9. এসটিডি :: initializer_list
  10. মূল্যবোধের রেফারেন্স (পদার্থ পদক্ষেপ)
  11. >>
  12. Lambdas
  13. ভারিয়াদিক টেম্পলেটগুলি
  14. টাইপ করুন এবং টেম্পলেট উপকরণ
  15. ইউনিকোড অক্ষর
  16. দীর্ঘ দীর্ঘ পূর্ণসংখ্যার প্রকার
  17. alignas এবং alignof
  18. decltype
  19. কাঁচা স্ট্রিং আক্ষরিক
  20. জেনারালাইজড পিওডি
  21. সাধারণ ইউনিয়ন
  22. স্থানীয় ক্লাস টেমপ্লেট আর্গুমেন্ট হিসাবে
  23. প্রত্যয় ফেরত প্রকার সিনট্যাক্স
  24. [[বহন করে_নির্ভরতা]] এবং [[উত্তর]]
  25. noexcept সুনির্দিষ্ট
  26. noexcept অপারেটর।
  27. C99 বৈশিষ্ট্য:
    • বর্ধিত অবিচ্ছেদ্য প্রকার
    • সংকীর্ণ / প্রশস্ত স্ট্রিং এর সংক্ষিপ্তকরণ
    • _ _ এসটিডিসি_বিহীন _ _
    • _Pragma (এক্স)
    • ভারার্গ ম্যাক্রো এবং খালি ম্যাক্রো যুক্তি
  28. _ _ মজা _ _
  29. ইনলাইন নেমস্পেসেস
  30. নির্ধারক নির্বাহী
  31. শ্রেণীর সদস্য প্রারম্ভিক
  32. ডিফল্ট এবং মুছুন
  33. সুস্পষ্ট রূপান্তর অপারেটর
  34. ব্যবহারকারী সংজ্ঞায়িত আক্ষরিক
  35. বাহ্যিক টেম্পলেটগুলি
  36. ফাংশন টেম্পলেটগুলির জন্য ডিফল্ট টেম্পলেট আর্গুমেন্ট
  37. নির্মাণকারীদের উত্তরাধিকারী
  38. ওভাররাইড এবং ফাইনাল
  39. সহজ এবং আরও সাধারণ SFINAE বিধি
  40. স্মৃতি মডেল
  41. thread_local

স্ট্যান্ডার্ড-লাইব্রেরি উপাদান

  1. পাত্রে জন্য প্রাথমিকীকরণ তালিকা
  2. ধারকগুলির জন্য শব্দার্থক পদক্ষেপ সরান
  3. forward_list
  4. হ্যাশ পাত্রে
    • unordered_map
    • unordered_multimap
    • unordered_set
    • unordered_multiset
  5. রিসোর্স ম্যানেজমেন্ট পয়েন্টার
    • unique_ptr
    • shared_ptr
    • weak_ptr
  6. সংক্ষিপ্তসার সমর্থন
    • সুতা
    • mutexes
    • কেশ
    • শর্ত পরিবর্তনশীল
  7. উচ্চ-স্তরের সম্মতি সমর্থন
    • packaged_thread
    • ভবিষ্যৎ
    • প্রতিশ্রুতি
    • ASYNC
  8. tuples
  9. Regex
  10. এলোমেলো সংখ্যা
    • uniform_int_distribution
    • স্বাভাবিক বন্টন
    • random_engine
    • প্রভৃতি
  11. পূর্ণসংখ্যার প্রকারের নাম যেমন int16_t, uint32_t, এবং int_fast64_t
  12. বিন্যাস
  13. অনুলিপি অনুলিপি এবং পুনর্বিবেচনা
  14. সিস্টেম ত্রুটি
  15. পাত্রে জন্য কর্ম () অপারেশন
  16. কনটেক্সট ফাংশন
  17. নোসেপ্ট ফাংশনগুলির পদ্ধতিগত ব্যবহার
  18. ফাংশন এবং বাঁধাই
  19. সংখ্যার মান রূপান্তর থেকে স্ট্রিং
  20. বাদ দেওয়া বরাদ্দকারী
  21. বৈশিষ্ট্য টাইপ করুন
  22. সময় উপযোগিতা: সময়কাল এবং সময়_পয়েন্ট
  23. অনুপাত
  24. quick_exit
  25. আরও অ্যালগরিদম, যেমন মুভ (), কপি_আইফ (), এবং is_sorted ()
  26. আবর্জনা সংগ্রহ এবিআই
  27. atomics

প্রত্যাশিত বৈশিষ্ট্য

  1. অনুলিপি সহ কোনও শ্রেণীর জন্য অনুলিপি নির্মাণকারী এবং অনুলিপি নির্ধারণ Gene
  2. একটি চরকে * একটি স্ট্রিং আক্ষরিক অর্পণ করুন।
  3. সি ++ 98 ব্যতিক্রম নির্দিষ্টকরণ
    • unexcepted_handler
    • set_unexpected
    • get_unexpected
    • অপ্রত্যাশিত
  4. ফাংশন অবজেক্টস এবং সম্পর্কিত ফাংশন
  5. auto_ptr
  6. নিবন্ধন
  7. ++ একটি বুলে
  8. রপ্তানি
  9. সি স্টাইলের কাস্ট

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