সি ++ প্রোগ্রামার সম্পর্কে জানা থাকা সমস্ত সাধারণ অপরিবর্তিত আচরণগুলি কী কী? [বন্ধ]


201

সি ++ প্রোগ্রামার সম্পর্কে জানা থাকা সমস্ত সাধারণ অপরিবর্তিত আচরণগুলি কী কী?

বলুন, যেমন:

a[i] = i++;


3
তুমি কি নিশ্চিত. এটি ভাল সংজ্ঞায়িত দেখাচ্ছে।
মার্টিন ইয়র্ক

17
+.২.২ সি ++ প্রোগ্রামিং ভাষায় মূল্যায়ন আদেশ [এক্সপ্লোরেশন মূল্যায়ন] তাই বলে I আমার অন্য কোনও রেফারেন্স নেই
Yesraaj

4
তিনি ঠিক বলেছেন .. কেবলমাত্র সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজে
.2.২.২ এর

4
আমি কল্পনা করব কারণ কমলারটি ভি [i] এর মেমরির অবস্থান গণনা করার আগে বা তার পরে i ++ চালায়। অবশ্যই, আমি সর্বদা সেখানে নিযুক্ত করা হবে। তবে এটি অপারেশনের ক্রমের উপর নির্ভর করে ভি [i] বা ভি [i + 1] কে লিখতে পারে ..
ইভান তেরান

2
সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজ যা বলেছে তা হ'ল "একটি অভিব্যক্তির মধ্যে স্যুপ এক্সপ্রেসনগুলির ক্রিয়াকলাপটি পূর্বনির্ধারিত particular বিশেষত, আপনি ধরে নিতে পারবেন না যে এক্সপ্রেশনটি বাম থেকে ডানদিকে মূল্যায়ন করা হয়েছে।"
ড্যাঙ্কাওয়াল্লারো

উত্তর:


233

ইশারা

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

বাফার উপচে পড়েছে

  • নেতিবাচক বা অফসেটে কোনও অবজেক্ট বা অ্যারেতে পড়া বা লেখা, বা negative বস্তুর আকারের বাইরে (স্ট্যাক / হিপ ওভারফ্লো)

পূর্ণসংখ্যা ওভারফ্লোস

  • স্বাক্ষরযুক্ত পূর্ণসংখ্যা ওভারফ্লো
  • গাণিতিকভাবে সংজ্ঞায়িত নয় এমন একটি অভিব্যক্তি মূল্যায়ন
  • একটি নেতিবাচক পরিমাণ দ্বারা বাম স্থানান্তর মান (নেতিবাচক পরিমাণে ডান শিফট বাস্তবায়ন সংজ্ঞায়িত করা হয়)
  • সংখ্যার বিটের সংখ্যার চেয়ে বড় বা সমান পরিমাণ দিয়ে মান স্থানান্তর করা (উদাহরণস্বরূপ int64_t i = 1; i <<= 72অপরিজ্ঞাত)

প্রকার, কাস্ট এবং কনস্ট

  • এমন একটি মান হিসাবে একটি সংখ্যাসূচক মান ালাই যা লক্ষ্য ধরণের দ্বারা প্রতিনিধিত্ব করা যায় না (প্রত্যক্ষভাবে বা স্ট্যাটিক_কাস্টের মাধ্যমে)
  • অবশ্যই একটি নির্ধারিত হওয়ার আগে একটি স্বয়ংক্রিয় ভেরিয়েবল ব্যবহার করা (যেমন, int i; i++; cout << i;)
  • সংকেত প্রাপ্তি ব্যতীত volatileবা অন্য কোনও ধরণের অবজেক্টের মান ব্যবহার করাsig_atomic_t
  • তার জীবদ্দশায় একটি স্ট্রিং আক্ষরিক বা অন্য কোনও কনস্ট অবজেক্টকে সংশোধন করার চেষ্টা করা হচ্ছে
  • প্রিপ্রোসেসিংয়ের সময় প্রশস্ত স্ট্রিং আক্ষরিক সাথে একটি সংকীর্ণ প্রতিযোগিতা

ফাংশন এবং টেম্পলেট

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

গলি

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

উত্স ফাইল এবং প্রাকপ্রসেসিং

  • একটি খালি খালি উত্স ফাইল যা একটি নতুন লাইনের সাথে শেষ হয় না, বা ব্যাকস্ল্যাশ দিয়ে শেষ হয় (সি ++ 11 এর পূর্বে)
  • একটি ব্যাকস্ল্যাশ অনুসরণ করে এমন একটি অক্ষর যা অক্ষর বা স্ট্রিং ধ্রুবকগুলিতে নির্দিষ্ট এস্কেপ কোডগুলির অংশ নয় (এটি সি ++ 11-এ বাস্তবায়ন-সংজ্ঞায়িত)।
  • বাস্তবায়ন সীমা অতিক্রম করে (নেস্টেড ব্লকের সংখ্যা, একটি প্রোগ্রামে ফাংশনের সংখ্যা, স্ট্যাকের জন্য সহজ স্থান ...)
  • প্রাক প্রসেসরের সংখ্যাসূচক মানগুলি যা দ্বারা প্রতিনিধিত্ব করা যায় না long int
  • কোনও ক্রিয়াকলাপের মতো ম্যাক্রো সংজ্ঞাটির বাম দিকে দিক নির্দেশনা প্রসেস করা
  • গতিশীলভাবে একটি #ifঅভিব্যক্তিতে সংজ্ঞায়িত টোকেন তৈরি করা

শ্রেণিবদ্ধ করা

  • স্থিতিশীল স্টোরেজ সময়কাল সহ একটি প্রোগ্রাম ধ্বংসের সময় কলিং প্রস্থান

এইচ এম ... এনএন (এক্স / 0) এবং ইনফিনিটি (0/0) আইইই 754 দ্বারা আচ্ছাদিত হয়েছিল, যদি সি ++ পরে ডিজাইন করা হয় তবে কেন এটি x / 0 অপরিবর্তিত হিসাবে রেকর্ড করে?
new123456

পুনরায়: "একটি ব্যাকস্ল্যাশ এমন একটি অক্ষর যা একটি চরিত্র বা স্ট্রিং ধ্রুবকটিতে নির্দিষ্ট পালানো কোডগুলির অংশ নয় by" এটি C89 (§3.1.3.4) এবং C ++ 03 (যা C89 অন্তর্ভুক্ত করে) তে ইউবি, তবে C99 এ নয়। সি 99 বলেছে যে "ফলাফলটি টোকেন নয় এবং ডায়াগনস্টিকের প্রয়োজন" (§6.4.4.4)। সম্ভবত সি ++ 0x (যা C89 অন্তর্ভুক্ত করে) একই হবে।
অ্যাডাম রোজনফিল্ড

1
সি 99 স্ট্যান্ডার্ডের পরিশিষ্ট জে 2 এ অপরিবর্তিত আচরণের একটি তালিকা রয়েছে। এই তালিকাটি সি ++ এ রূপান্তর করতে কিছু কাজ লাগবে। আপনাকে C99 ধারাগুলির পরিবর্তে সঠিক সি ++ অনুচ্ছেদের রেফারেন্সগুলি পরিবর্তন করতে হবে, অপ্রাসঙ্গিক কিছু মুছে ফেলতে হবে এবং সি ++ এর পাশাপাশি সিতেও এই সমস্ত জিনিস সত্যই অপরিবর্তিত আছে কিনা তা পরীক্ষা করে দেখতে হবে তবে এটি একটি শুরু প্রদান করে provides
স্টিভ জেসপ

1
@ new123456 - সমস্ত ভাসমান পয়েন্ট ইউনিটগুলি IEE754 সামঞ্জস্যপূর্ণ নয়। যদি সি +++ এর জন্য আইইই 754 কমপ্লায়েন্সের প্রয়োজন হয়, সংকলকগণকে স্পষ্টত চেকের মাধ্যমে আরএইচএস শূন্যের ক্ষেত্রে কেসটি পরীক্ষা এবং পরিচালনা করতে হবে। আচরণটি অনির্ধারিত করে সংকলক "যদি আপনি কোনও আইইই 7575 এফপিইউ ব্যবহার করেন, আপনি আইইইই 754 এফপিইউ আচরণ পাবেন না" বলে এই ওভারহেডটি এড়াতে পারে avoid
সিকিউরিটিম্যাট

1
"একটি অভিব্যক্তি মূল্যায়ন যার ফলাফলটি সম্পর্কিত ধরণের পরিসরে নয়" .... পূর্ণসংখ্যার ওভারফ্লো UNSIGNED ইন্টিগ্রাল প্রকারের জন্য সঠিকভাবে সংজ্ঞায়িত করা হয়েছে, কেবল স্বাক্ষরিত নয়।
নসিটার সেবাদত

31

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

একমাত্র প্রয়োজন হ'ল ফাংশনটি বলার আগে সমস্ত পরামিতিগুলি সম্পূর্ণরূপে মূল্যায়ন করা উচিত।


এই:

// The simple obvious one.
callFunc(getA(),getB());

এর সমতুল্য হতে পারে:

int a = getA();
int b = getB();
callFunc(a,b);

অথবা এটা:

int b = getB();
int a = getA();
callFunc(a,b);

এটি হয়ও হতে পারে; এটি সংকলক পর্যন্ত। পার্শ্ব প্রতিক্রিয়াগুলির উপর নির্ভর করে ফলাফলটি গুরুত্বপূর্ণ হতে পারে।


23
অর্ডারটি অনির্ধারিত, সংজ্ঞায়িত নয়।
রব কেনেডি

1
আমি এটিকে ঘৃণা করি :) আমি এই দিনগুলির একটি একবার সন্ধান করার জন্য আমি একদিনের কাজ হারিয়ে ফেলেছিলাম ... যাইহোক আমার পাঠ শিখেছে এবং ভাগ্যক্রমে আবার পড়িনি
রবার্ট গোল্ড

2
@ রব: আমি এখানে অর্থ পরিবর্তনের বিষয়ে আপনার সাথে তর্ক করব, তবে আমি জানি যে এই দুটি শব্দের সঠিক সংজ্ঞা নিয়ে স্ট্যান্ডার্ড কমিটি খুব আকর্ষণীয়। সুতরাং আমি কেবল এটি পরিবর্তন করব :-)
মার্টিন ইয়র্ক

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

27

সংকলকটি একটি অভিব্যক্তির মূল্যায়ন অংশগুলিকে পুনরায় অর্ডার করতে মুক্ত (অর্থটি অপরিবর্তিত রয়েছে বলে ধরে নেওয়া)।

মূল প্রশ্ন থেকে:

a[i] = i++;

// This expression has three parts:
(a) a[i]
(b) i++
(c) Assign (b) to (a)

// (c) is guaranteed to happen after (a) and (b)
// But (a) and (b) can be done in either order.
// See n2521 Section 5.17
// (b) increments i but returns the original value.
// See n2521 Section 5.2.6
// Thus this expression can be written as:

int rhs  = i++;
int lhs& = a[i];
lhs = rhs;

// or
int lhs& = a[i];
int rhs  = i++;
lhs = rhs;

ডাবল চেকড লকিং এবং একটি সহজ ভুল করা।

A* a = new A("plop");

// Looks simple enough.
// But this can be split into three parts.
(a) allocate Memory
(b) Call constructor
(c) Assign value to 'a'

// No problem here:
// The compiler is allowed to do this:
(a) allocate Memory
(c) Assign value to 'a'
(b) Call constructor.
// This is because the whole thing is between two sequence points.

// So what is the big deal.
// Simple Double checked lock. (I know there are many other problems with this).
if (a == null) // (Point B)
{
    Lock   lock(mutex);
    if (a == null)
    {
        a = new A("Plop");  // (Point A).
    }
}
a->doStuff();

// Think of this situation.
// Thread 1: Reaches point A. Executes (a)(c)
// Thread 1: Is about to do (b) and gets unscheduled.
// Thread 2: Reaches point B. It can now skip the if block
//           Remember (c) has been done thus 'a' is not NULL.
//           But the memory has not been initialized.
//           Thread 2 now executes doStuff() on an uninitialized variable.

// The solution to this problem is to move the assignment of 'a'
// To the other side of the sequence point.
if (a == null) // (Point B)
{
    Lock   lock(mutex);
    if (a == null)
    {
        A* tmp = new A("Plop");  // (Point A).
        a = tmp;
    }
}
a->doStuff();

// Of course there are still other problems because of C++ support for
// threads. But hopefully these are addresses in the next standard.

সিকোয়েন্স পয়েন্ট বলতে কী বোঝায়?
Yesraaj


1
ওহ ... এটি বাজে, বিশেষত যেহেতু আমি জাভাতে ঠিক সেই কাঠামোর প্রস্তাব দিয়েছি
টম

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

মার্টিন ইয়র্ক: <i> // (সি) এর নিশ্চয়তা (ক) এবং (খ) </ i> এর পরে ঘটবে কি? স্বীকার করা যায় যে সেই নির্দিষ্ট উদাহরণে কেবলমাত্র 'সিন্দুটি' যদি একটি হার্ডওয়্যার রেজিস্টারে একটি অস্থায়ী পরিবর্তনশীল ম্যাপ করা হয় তবে এটির বিষয়টি বিবেচনা করতে পারে, এবং একটি [i] ('i' এর পুরানো মান) এটির সাথে যুক্ত করা হয়েছিল, তবে সেখানে কি কোনও আছে? গ্যারান্টি যে বর্ধন একটি ক্রম বিন্দু আগে ঘটবে?
সুপারক্যাট

5

আমার প্রিয় "টেমপ্লেটগুলির তাত্ক্ষণীতে অসীম পুনরাবৃত্তি" কারণ আমি বিশ্বাস করি এটি সঙ্কলনের সময় একমাত্র অপরিবর্তিত আচরণ ঘটে occurs


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

সমস্যাটি হ'ল সংকলকটি আপনার কোডটি পরীক্ষা করতে পারে এবং এটি অসীম পুনরাবৃত্তিতে ভুগবে কিনা তা সুনির্দিষ্টভাবে সিদ্ধান্ত নিতে পারে না। এটি থামার সমস্যার একটি উদাহরণ। দেখুন: stackoverflow.com/questions/235984/...
ড্যানিয়েল Earwicker

হ্যাঁ এটি অবশ্যই বন্ধ হয়ে যাওয়ার সমস্যা
রবার্ট গোল্ড

এটি খুব কম স্মৃতির কারণে অদলবদলের কারণে এটি আমার সিস্টেমকে ক্র্যাশ করেছে।
জোহানেস স্কাউব -

2
প্রিপ্রসেসর ধ্রুবকগুলি যা কোনও ইন্টিতে ফিট করে না সেগুলিও সময় সংকলন।
জোশুয়া

5

constব্যবহার করে নেস স্ট্রিপিংয়ের পরে ধ্রুবককে অর্পণ করা const_cast<>:

const int i = 10; 
int *p =  const_cast<int*>( &i );
*p = 1234; //Undefined

5

অপরিজ্ঞাত আচরণের পাশাপাশি , সমানভাবে বাজে বাস্তবায়ন-সংজ্ঞায়িত আচরণও রয়েছে

অপরিজ্ঞাত আচরণটি ঘটে যখন কোনও প্রোগ্রাম কিছু করে যার ফলাফলটি মান দ্বারা নির্দিষ্ট করা হয় না।

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

বাস্তবায়ন-সংজ্ঞায়িত আচরণ কেবল তখনই আপনাকে কামড়ায় যখন আপনি পোর্টিং শুরু করেন (তবে সংকলকের নতুন সংস্করণে আপগ্রেড করাও পোর্টিং হয়!)


4

ভেরিয়েবলগুলি কেবলমাত্র একটি এক্সপ্রেশনে আপডেট করা যেতে পারে (প্রযুক্তিগতভাবে একবার সিকোয়েন্স পয়েন্টের মধ্যে)।

int i =1;
i = ++i;

// Undefined. Assignment to 'i' twice in the same expression.

দুটি সিকোয়েন্স পয়েন্টের মধ্যে কমপক্ষে একবার ইনফ্যাক্ট করুন ।
প্রসূন সৌরভ

2
@ প্রসূন: আমি মনে করি আপনি বোঝাতে চেয়েছিলেন: একবারে দুটি সিকোয়েন্স পয়েন্টের মধ্যে একবার। :-)
নওয়াজ

3

বিভিন্ন পরিবেশের সীমাবদ্ধতার একটি প্রাথমিক বোঝাপড়া। পুরো তালিকাটি সি স্পেসিফিকেশনের 5.2.4.1 বিভাগে রয়েছে। এখানে কয়েকটি দেওয়া হয়েছে;

  • এক ফাংশনে 127 পরামিতি ডি fi nিশন
  • একটি ফাংশন কলে 127 টি আর্গুমেন্ট
  • এক ম্যাক্রো ডি itionিশনে 127 পরামিতি
  • একটি ম্যাক্রো অনুরোধে 127 টি যুক্তি
  • একটি লজিকাল উত্স লাইনে 4095 টি অক্ষর
  • একটি অক্ষর স্ট্রিং আক্ষরিক বা প্রশস্ত স্ট্রিং আক্ষরিক (সংক্ষিপ্তকরণের পরে) মধ্যে 4095 টি অক্ষর
  • 65535 বাইট কোনও বস্তুতে (কেবলমাত্র একটি পরিবেশিত পরিবেশে)
  • # অন্তর্ভুক্ত fi কমের জন্য 15 নেস্টিং স্তর
  • একটি সুইচ স্টেটমেন্টের জন্য 1023 কেস লেবেল (কোনও সংযুক্ত স্যুইচ স্টেটমেন্ট বাদে)

আমি স্যুইচ স্টেটমেন্টের জন্য 1023 কেস লেবেলের সীমাটি দেখে কিছুটা অবাক হয়েছিলাম, আমি জোর করে বলতে পারি যে উত্পন্ন কোড / লেক্স / পার্সারগুলির পক্ষে মোটামুটি সহজভাবে ছাড়িয়ে গিয়েছি।

যদি এই সীমাগুলি অতিক্রম করা হয়, তবে আপনার আচরণের সংজ্ঞা (ক্র্যাশ, সুরক্ষা ত্রুটি, ইত্যাদি ...) রয়েছে।

ঠিক আছে, আমি জানি এটি সি স্পেসিফিকেশন থেকে এসেছে তবে সি ++ এই মূল সমর্থনগুলি ভাগ করে shares


9
আপনি যদি এই সীমাগুলিকে আঘাত করেন তবে আপনি অপরিজ্ঞাত আচরণের চেয়ে বেশি সমস্যা পেয়েছেন।
new123456

আপনি সহজেই কোনও স্টাটে যেমন কোনও এসটিডি :: ভেক্টর
ডেমি

2

memcpyওভারল্যাপিং মেমরি অঞ্চলগুলির মধ্যে অনুলিপি করতে ব্যবহার করা। উদাহরণ স্বরূপ:

char a[256] = {};
memcpy(a, a, sizeof(a));

আচরণটি সি স্ট্যান্ডার্ড অনুসারে সংজ্ঞায়িত, যা সি ++ 03 স্ট্যান্ডার্ড দ্বারা গ্রহণ করা হয়।

7.21.2.1 মেমকি ফাংশন

সংক্ষিপ্তসার

1 / # অন্তর্ভুক্ত শূন্য * মেমকি (শূন্য * সীমাবদ্ধ এস 1, কনস্টুট শূন্য * সীমাবদ্ধ এস 2, আকার_t এন);

বিবরণ

2 / মেমকি ফাংশনটি এস 2 দ্বারা নির্দেশিত বস্তুর মধ্যে এস 1 দ্বারা নির্দেশিত বস্তু থেকে n অক্ষর অনুলিপি করে। যদি অনুলিপি করা বস্তুগুলির মধ্যে অনুলিপি হয় তবে আচরণটি সংজ্ঞায়িত। রিটার্ন 3 মেমকি ফাংশন এস 1 এর মান প্রদান করে।

7.21.2.2 মেমোমোভ ফাংশন

সংক্ষিপ্তসার

1 # শূন্য * মেমোমোভ অন্তর্ভুক্ত করুন (শূন্য * এস 1, কনস্টেট শূন্য * এস 2, আকার_t এন);

বিবরণ

2 মেমমোভ ফাংশন এস 2 দ্বারা নির্দেশিত বস্তুর মধ্যে এস 1 দ্বারা নির্দেশিত বস্তু থেকে n অক্ষর অনুলিপি করে। অনুলিপিটি সংঘটিত হয় যেমন s2 দ্বারা নির্দেশিত বস্তু থেকে এন অক্ষরগুলি প্রথমে এন অক্ষরের অস্থায়ী অ্যারেতে অনুলিপি করা হয় যা s1 এবং s2 দ্বারা নির্দেশিত বস্তুগুলিকে ওভারল্যাপ করে না এবং তারপরে অস্থায়ী অ্যারে থেকে এন অক্ষরগুলি অনুলিপি করা হয় s1 দ্বারা নির্দেশিত বস্তু। রিটার্নস

3 মেমমোভ ফাংশন এস 1 এর মান প্রদান করে।


2

একমাত্র প্রকার যার জন্য সি ++ একটি আকারের গ্যারান্টি দেয় char। এবং আকারটি হল 1. অন্যান্য সমস্ত ধরণের আকার প্ল্যাটফর্ম নির্ভর।


<cstdint> কি এর জন্য নয়? এটি uint16_6 এবং cetera এর মতো ধরণের সংজ্ঞা দেয়।
জ্যাস্পার বেকারস

হ্যাঁ, তবে বেশিরভাগ ধরণের আকার, দীর্ঘ বলে, এটি সঠিকভাবে সংজ্ঞায়িত হয় না।
জারেডপাড়

এছাড়াও সিএসটিডিন্ট এখনও বর্তমান সি ++ স্ট্যান্ডার্ডের অংশ নয়। বর্তমানে পোর্টেবল সমাধানের জন্য boost / stdint.hpp দেখুন।
ইভান তেরান

এটি অপরিজ্ঞাত আচরণ নয়। স্ট্যান্ডার্ডটি বলে যে মানানসই প্ল্যাটফর্ম মাপগুলি সংজ্ঞায়িত না করে মানকে সংজ্ঞায়িত করে।
ড্যানিয়েল আরউইকার

1
@ জেয়ার্ডপাড়: এটি অনেকগুলি কথোপকথনের থ্রেড সহ একটি জটিল পোস্ট, তাই আমি এখানে এটি সংক্ষিপ্ত করে রেখেছি । নীচের লাইনটি হ'ল: "5. বাইনারি -2147483647 এবং +2147483647 উপস্থাপনের জন্য আপনার 32 বিট লাগবে" "
জন ডিবলিং

2

ভিন্ন সংকলন ইউনিটের নামস্থান স্তরের অবজেক্টগুলি কখনই আরম্ভের জন্য একে অপরের উপর নির্ভর করে না কারণ তাদের প্রারম্ভিক ক্রমটি সংজ্ঞায়িত।

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