স্টাডি :: সাইজ_টি কখন ব্যবহার করবেন?


201

আমি কেবল ভাবছি যে আমি std::size_tলুপ এবং স্টাফের পরিবর্তে ব্যবহার করব int? এই ক্ষেত্রে:

#include <cstdint>

int main()
{
    for (std::size_t i = 0; i < 10; ++i) {
        // std::size_t OK here? Or should I use, say, unsigned int instead?
    }
}

সাধারণত, কখন ব্যবহার std::size_tকরবেন সে সম্পর্কে সর্বোত্তম অনুশীলন কী?

উত্তর:


185

থাম্বের একটি ভাল নিয়ম এমন কোনও কিছুর জন্য যা আপনার স্বাভাবিকভাবে std::size_tনিজেই লুপের সাথে তুলনার প্রয়োজন ।

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

আপনি মাত্র একটি সংখ্যা পর্যন্ত গণনা করা হয়, তাহলে এটা হয় পরিবর্তনশীল যে সংখ্যা বা একটি ঝুলিতে ধরণ ব্যবহার করতে আরো প্রাকৃতিক হতে পারে intবা unsigned intএই মেশিনের জন্য একটি প্রাকৃতিক আকার হওয়া উচিত (যদি বৃহৎ যথেষ্ট)।


40
এটি উল্লেখ করার মতো বিষয় যে কখন আপনাকে সুরক্ষা বাগের দিকে নিয়ে যেতে পারে তা ব্যবহার না করা । size_t
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

5
কেবলমাত্র "প্রাকৃতিক" নয়, স্বাক্ষরিত এবং স্বাক্ষরবিহীন প্রকারের মিশ্রণের ফলে সুরক্ষা বাগগুলিও হতে পারে। স্বাক্ষরবিহীন সূচকগুলি হ্যান্ডেল করার জন্য ব্যথা এবং কাস্টম ভেক্টর শ্রেণি ব্যবহারের ভাল কারণ।
জো সো

2
@ জোসো ssize_tস্বাক্ষরিত মানগুলির জন্যও রয়েছে ।
EntangledLoops

70

size_tsizeofঅপারেটরের ফলাফলের ধরণ ।

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

এছাড়াও, size_tবাইটগুলিতে একটি আকারকে উপস্থাপন করার জন্য কোডটি পোর্টেবল করতে সহায়তা করে।


32

size_tপ্রকার নির্দিষ্ট বোঝানো হয় আকার তাই এটি এটি ব্যবহার করতে, উদাহরণস্বরূপ, একটি স্ট্রিং এর দৈর্ঘ্য পেয়ে এবং তারপর প্রতিটি অক্ষর প্রক্রিয়াকরণের স্বাভাবিক কিছু:

for (size_t i = 0, max = strlen (str); i < max; i++)
    doSomethingWith (str[i]);

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

তবে এই জাতীয় বিষয়গুলির জন্য নজর রাখুন:

for (size_t i = strlen (str) - 1; i >= 0; i--)

যা স্বাক্ষরবিহীন মানগুলির মোড়ানোর আচরণের কারণে একটি অসীম লুপ তৈরি করবে (যদিও আমি সংকলকরা এর বিরুদ্ধে সতর্ক করতে দেখেছি)। এটিও হ্রাস করা যেতে পারে (বুঝতে কিছুটা কঠিন তবে মোড়ানোর সমস্যা থেকে কমপক্ষে প্রতিরোধ ক্ষমতা):

for (size_t i = strlen (str); i-- > 0; )

ধারাবাহিকতা শর্তের একটি পোস্ট-চেক পার্শ্ব-প্রতিক্রিয়ায় হ্রাসটি স্থানান্তরিত করে, এটি হ্রাসের আগে মানটির উপর ধারাবাহিকতা পরীক্ষা করে , তবে এখনও লুপের অভ্যন্তরে হ্রাসকৃত মানটি ব্যবহার করে (এজন্য লুপটি len .. 1বরং চালানো হয় len-1 .. 0)।


14
যাইহোক, strlenলুপের প্রতিটি পুনরাবৃত্তিটি কল করা খারাপ অভ্যাস । :) আপনি এর মতো কিছু করতে পারেন:for (size_t i = 0, len = strlen(str); i < len; i++) ...
musiphil

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

2
সঠিকভাবে গণনা নিম্নলিখিত (কুখ্যাত) উপায়ে করা যেতে পারে:for (size_t i = strlen (str); i --> 0;)
জো

1
@JoSo, আসলে বেশ একটি ঝরঝরে কৌতুক যে যদিও আমি নিশ্চিত আমি নই প্রবর্তনের মত -->অপারেটর "যায়" (দেখুন stackoverflow.com/questions/1642028/... )। আপনার পরামর্শটি উত্তরে অন্তর্ভুক্ত করেছে।
প্যাক্সিডিয়াবল

আপনি যদি একটি সহজ করতে পারি if (i == 0) break;, লুপ জন্য শেষ (যেমন এ for (size_t i = strlen(str) - 1; ; --i)আপনার মত (আমি ভাল যদিও, কিন্তু এই ঠিক যেমন ভাল কাজ করবে
RastaJedi

13

সংজ্ঞা অনুসারে, অপারেটরের size_tফলাফল sizeofsize_tআকারের রেফারেন্স তৈরি করা হয়েছিল।

আপনি কতবার কিছু করেছেন (10, আপনার উদাহরণে) আকারগুলি নয়, তবে কেন ব্যবহার করবেন size_t? int, বা unsigned int, ঠিক আছে উচিত।

iলুপের ভিতরে আপনি কী করেন তা অবশ্যই প্রাসঙ্গিক । যদি আপনি এটি কোনও ফাংশনে পাস করেন যা একটি গ্রহণ করে unsigned int, উদাহরণস্বরূপ, চয়ন করুন unsigned int

যাই হোক না কেন, আমি অন্তর্নিহিত ধরণের রূপান্তর এড়ানোর পরামর্শ দিই। সমস্ত ধরণের রূপান্তরকে সুস্পষ্ট করুন।


10

size_tকোনও আইটেমের আকারের মাত্রা নির্দিষ্ট করার একটি খুব পঠনযোগ্য উপায় - একটি স্ট্রিংয়ের দৈর্ঘ্য, কোনও পয়েন্টার গ্রহণ করে বাইটের পরিমাণ ইত্যাদি It's এটি প্ল্যাটফর্মের মধ্যেও বহনযোগ্য - আপনি দেখতে পাবেন যে 64 বিট এবং 32 বিট উভয়ই সিস্টেম ফাংশনগুলির সাথে সুন্দর আচরণ করে এবং size_t- unsigned intনা পারে এমন কিছু (যেমন কখন আপনার ব্যবহার করা উচিত)unsigned long


9

সংক্ষিপ্ত উত্তর:

প্রায় না

দীর্ঘ উত্তর:

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

উদাহরণ:

std::vector<A> data;
[...]
// calculate the index that should be used;
size_t i = calc_index(param1, param2);
// doing calculations close to the underflow of an integer is already dangerous

// do some bounds checking
if( i - 1 < 0 ) {
    // always false, because 0-1 on unsigned creates an underflow
    return LEFT_BORDER;
} else if( i >= data.size() - 1 ) {
    // if i already had an underflow, this becomes true
    return RIGHT_BORDER;
}

// now you have a bug that is very hard to track, because you never 
// get an exception or anything anymore, to detect that you actually 
// return the false border case.

return calc_something(data[i-1], data[i], data[i+1]);

স্বাক্ষরিত সমতুল্য size_tহয় ptrdiff_tনা int। তবে intসাইজ_টি এর চেয়ে বেশিরভাগ ক্ষেত্রে ব্যবহার করা আরও ভাল। ptrdiff_tহয় long32 এবং 64 বিট সিস্টেমে।

এর অর্থ হ'ল আপনি যখনই স্টাড :: ধারকগুলির সাথে ইন্ট্যারাক্ট করেন তখনই আপনাকে সর্বদা আকার_ টু থেকে রূপান্তর করতে হবে, যা খুব সুন্দর নয়। তবে একটি চলমান নেটিভ সম্মেলনে সি ++ এর লেখক উল্লেখ করেছেন যে একটি স্বাক্ষরযুক্ত সাইজ_টাকে স্ট্যান্ড :: ভেক্টর ডিজাইন করা একটি ভুল ছিল।

যদি আপনার সংকলক আপনাকে ptrdiff_t থেকে আকার_t পর্যন্ত অন্তর্নিহিত রূপান্তরগুলির বিষয়ে সতর্কতা দেয় তবে আপনি এটি নির্মাণকারীর বাক্য গঠন দিয়ে সুস্পষ্ট করতে পারেন:

calc_something(data[size_t(i-1)], data[size_t(i)], data[size_t(i+1)]);

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

for(const auto& d : data) {
    [...]
}

নেটিভ যাওয়ার সময় বাজার্ন স্ট্রস্ট্রপ (সি ++ লেখক) এর কিছু শব্দ এখানে

কিছু লোকের জন্য এসটিএলে এই স্বাক্ষরযুক্ত / স্বাক্ষরযুক্ত ডিজাইনের ত্রুটিটি যথেষ্ট কারণ, এসটিডি :: ভেক্টরটি ব্যবহার না করে বরং তার নিজস্ব বাস্তবায়ন।


1
আমি বুঝতে পেরেছি তারা কোথা থেকে আসছেন তবে আমি এখনও লিখতে অদ্ভুত মনে করি for(int i = 0; i < get_size_of_stuff(); i++)। এখন, নিশ্চিত, আপনি অনেকগুলি কাঁচা লুপগুলি করতে নাও চান, তবে - আসুন, আপনি সেগুলিও ব্যবহার করেন।
einpoklum

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

1
আমি সেই স্বাক্ষরবিহীন i = 0 পেয়েছি; দাবী (i-1, MAX_INT); তবে আপনি কেন বলছেন তা আমি বুঝতে পারছি না "যদি আমার যদি ইতিমধ্যে একটি জলের তল থাকে তবে এটি সত্য হয়ে যায়" কারণ স্বাক্ষরবিহীন ইনটগুলিতে পাটিগণিতের আচরণ সর্বদা সংজ্ঞায়িত হয়, অর্থাৎ। ফলাফলটি হল সবচেয়ে বড় আকারের প্রতিনিধিত্বমূলক পূর্ণসংখ্যার আকার mod সুতরাং যদি i == 0 হয়, তবে i-- MAX)T হয়ে যায় এবং তারপরে i ++ আবার 0 হয়ে যায়।
mabraham

@ এমব্রাহাম আমি মনোযোগ দিয়ে দেখেছিলাম, এবং আপনি ঠিক বলেছেন, সমস্যাটি দেখানোর জন্য আমার কোডটি সেরা নয়। সাধারণত এটি x + 1 < yসমান x < y - 1, তবে তারা অবিরত পূর্ণসংখ্যার সাথে হয় না। সমান হিসাবে ধরে নেওয়া জিনিসগুলিকে রূপান্তরিত করা হলে এটি সহজেই বাগগুলি প্রবর্তন করতে পারে।
অ্যারেন

8

সি-স্টাইলের অ্যারেগুলি সূচীকরণ / গণনা করার জন্য std :: আকার_t ব্যবহার করুন।

এসটিএল পাত্রে, আপনার কাছে (উদাহরণস্বরূপ) উপস্থিত থাকবে vector<int>::size_type, যা ভেক্টর উপাদানকে সূচক এবং গণনা করার জন্য ব্যবহার করা উচিত।

অনুশীলনে, এগুলি উভয়ই স্বাক্ষরবিহীন ints হয়, তবে এটির নিশ্চয়তা নেই, বিশেষত কাস্টম বরাদ্দকারীদের ব্যবহার করার সময়।


2
লিনাক্সে জিসিসি সহ, std::size_tসাধারণত unsigned long(4 বাইট) পরিবর্তে unisgned int( 64 বিট সিস্টেমে 8 বাইট) থাকে।
রাফাক

5
সি-স্টাইলের অ্যারেগুলি size_tযদিও সূচিযুক্ত নয় , যেহেতু সূচকগুলি নেতিবাচক হতে পারে। size_tযদিও কেউ negativeণাত্মক যেতে না চান তবে তার নিজের অ্যারের উদাহরণ স্বরূপ ব্যবহার করতে পারেন ।
জোহানেস স্কাউব -

ইউ 32 এ তুলনা কি ইউ 32 এর সাথে তুলনা তত দ্রুত? আমি লুপ সেন্ডিনেল হিসাবে u8s এবং u16 গুলি ব্যবহারের জন্য কঠোর পারফরম্যান্সের জরিমানা সময় কাটিয়েছি, তবে আমি জানি না যে ইন্টেল 64 এর দশকে একসাথে তাদের অভিনয় অর্জন করেছে কিনা।
ক্র্যাশ ওয়ার্কস

2
যেহেতু সি স্টাইলের অ্যারে ইনডেক্সিংটি +পয়েন্টারগুলিতে অপারেটর ব্যবহারের সমতুল্য , তাই মনে ptrdiff_tহয় এটি সূচকগুলির জন্য ব্যবহারযোগ্য।
পাভেল মিনায়েভ

8
হিসাবে vector<T>::size_type(এবং অন্যান্য সমস্ত size_tধারকগুলির জন্য ডিট্টো ), এটি প্রকৃতপক্ষে বরং অকেজো, কারণ এটি কার্যকরভাবে গ্যারান্টিযুক্ত - এটি টাইপডেফড Allocator::size_type, এবং কনটেইনারগুলির সাথে সম্পর্কিত বিধিনিষেধের জন্য size_typeঅবশ্যই 20.1.5 / 4 দেখুন - বিশেষত, অবশ্যই হতে হবে size_tএবং difference_typeহতে হবে ptrdiff_t। অবশ্যই, ডিফল্ট std::allocator<T>সেই প্রয়োজনীয়তাগুলি পূরণ করে। সুতরাং কেবল size_t
খাটোটি

7

শীঘ্রই বেশিরভাগ কম্পিউটারগুলি -৪-বিট ওএস সহ -৪ বিট আর্কিটেকচার হবে: কোটি কোটি উপাদানগুলির ধারকগুলিতে চলমান প্রোগ্রামগুলি চলছে। তারপর আপনি আবশ্যক ব্যবহার size_tপরিবর্তে int, লুপ সূচক হিসাবে অন্যথায় আপনার সূচক হবে চারপাশে মোড়ানো 2 ^ 32 এ: ম উপাদান উভয় 32- এবং 64-বিট সিস্টেমে।

ভবিষ্যতের জন্য প্রস্তুত!


আপনার যুক্তিটি কেবলমাত্র তার long intচেয়ে বেশি যায় যার অর্থ একটির পরিবর্তে প্রয়োজন int। যদি size_t64৪-বিট ওএসের ক্ষেত্রে এটি প্রাসঙ্গিক হয় তবে এটি 32-বিট ওএসের মতোই প্রাসঙ্গিক ছিল।
einpoklum

4

সাইজ_টি ব্যবহার করার সময় নিম্নলিখিত অভিব্যক্তিটি সম্পর্কে সতর্ক থাকুন

size_t i = containner.find("mytoken");
size_t x = 99;
if (i-x>-1 && i+x < containner.size()) {
    cout << containner[i-x] << " " << containner[i+x] << endl;
}

এক্স এর জন্য আপনার মূল্য কী হবে তা নির্বিশেষে আপনি যদি প্রকাশের ক্ষেত্রে মিথ্যা পাবেন। এটি বুঝতে আমার বেশ কয়েক দিন সময় লেগেছিল (কোডটি এত সহজ যে আমি ইউনিট পরীক্ষা করিনি), যদিও সমস্যার উত্সটি সনাক্ত করতে কয়েক মিনিট সময় নেয়। কাস্ট করা বা শূন্য ব্যবহার করা ভাল sure

if ((int)(i-x) > -1 or (i-x) >= 0)

উভয় উপায় কাজ করা উচিত। এখানে আমার পরীক্ষার রান

size_t i = 5;
cerr << "i-7=" << i-7 << " (int)(i-7)=" << (int)(i-7) << endl;

আউটপুট: i-7 = 18446744073709551614 (ইনট) (আই -7) = - 2

আমি অন্যের মতামত চাই


2
দয়া করে মনে রাখবেন (int)(i - 7)একটি underflow যে কাস্ট হয় intপরে, যখন int(i) - 7থেকে আপনি প্রথম ধর্মান্তরিত একটি underflow নয় iএকটি থেকে int, এবং তারপর বিয়োগ 7। অতিরিক্তভাবে আমি আপনার উদাহরণটি বিভ্রান্তিকর পেয়েছি।
হচল

আমার বক্তব্যটি হল আপনি যখন বিয়োগগুলি করেন তখন আন্তঃরক্ষা সাধারণত নিরাপদ।
কেমিন চিউ

4

সাইজ_টি বিভিন্ন লাইব্রেরি দ্বারা নির্দেশিত হয় যে সেই ধারকটির আকার শূন্য নয়। আপনি একবার ফিরে এলে আপনি এটি ব্যবহার করুন: 0

তবে উপরে আপনার উদাহরণে একটি আকার_t এ লুপ করা একটি সম্ভাব্য বাগ। নিম্নোক্ত বিবেচনা কর:

for (size_t i = thing.size(); i >= 0; --i) {
  // this will never terminate because size_t is a typedef for
  // unsigned int which can not be negative by definition
  // therefore i will always be >= 0
  printf("the never ending story. la la la la");
}

স্বাক্ষরবিহীন পূর্ণসংখ্যার ব্যবহারের মধ্যে এই ধরণের সূক্ষ্ম সমস্যা তৈরি করার সম্ভাবনা রয়েছে। অতএব আমি যখন আমি প্রয়োজনীয় পাত্রে / প্রকারের সাথে যোগাযোগ করি তখনই আমি সাইজ_টি ব্যবহার করতে পছন্দ করি।


এভারোন মনে হয় এই বাগটি নিয়ে বিরক্ত না করে লুপে সাইজ_টি ব্যবহার করবে এবং আমি এটি খুব কঠিনভাবে শিখেছি
প্রঞ্জল গুপ্ত

-2

size_tএকটি স্বাক্ষরবিহীন প্রকার যা আপনার আর্কিটেকচারের জন্য সর্বাধিক পূর্ণসংখ্যার মানটি ধরে রাখতে পারে, সুতরাং এটি চিহ্নের কারণে পূর্ণসংখ্যার ওভারফ্লো থেকে রক্ষা পায় ( 0x7FFFFFFF1 দ্বারা সাইন ইনড ইনক্রিমেন্ট আপনাকে -1 দেবে) বা সংক্ষিপ্ত আকার (স্বাক্ষরযুক্ত স্বল্প INT 0xFFFF 1 দ্বারা বৃদ্ধি পাবে আপনাকে দেবে 0)।

এটি মূলত অ্যারে ইনডেক্সিং / লুপস / অ্যাড্রেস পাটিগণিত ইত্যাদিতে ব্যবহৃত হয়। মত memset()এবং একই কাজগুলি size_tকেবল গ্রহণ করে , কারণ তাত্ত্বিকভাবে আপনার আকারের মেমরির একটি ব্লক থাকতে পারে 2^32-1(32 বিট প্ল্যাটফর্মে)।

এই জাতীয় সরল লুপগুলি বিরক্ত করবেন না এবং কেবল ইনট ব্যবহার করবেন না।


-3

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

কিছু ফাংশন একটি আকার_টি ফেরত দেয় এবং আপনি তুলনা করার চেষ্টা করলে আপনার সংকলক আপনাকে সতর্ক করে দেবে।

দ্রুত হ্যাকের জন্য উপযুক্ত স্বাক্ষরযুক্ত / স্বাক্ষরযুক্ত ডেটাটাইপ বা কেবল টাইপকাস্ট ব্যবহার করে এড়িয়ে চলুন।


4
আপনি যদি বাগ এবং সুরক্ষা গর্তগুলি এড়াতে চান তবে এটি ব্যবহার করুন।
ক্রেগ ম্যাককুইন

2
এটি আসলে আপনার সিস্টেমে বৃহত্তম সংখ্যার প্রতিনিধিত্ব করতে সক্ষম নাও হতে পারে।
অ্যাড্রিয়ান ম্যাকার্থি

-4

সাইজ_টি স্বাক্ষরবিহীন সুতরাং আপনি যখনই স্বাক্ষরযুক্ত স্বাক্ষাত চান না আপনি এটি ব্যবহার করতে পারেন।

আমি যখন অ্যারের আকার নির্দিষ্ট করতে চাই তখন আমি এটি ব্যবহার করি, কাউন্টার Ect ...

void * operator new (size_t size); is a good use of it.

10
আসলে এটি অ স্বাক্ষরযুক্ত ইন্টের সমতুল্য নয়। এটা তোলে হয় স্বাক্ষরবিহীন, কিন্তু এটা বড় হতে পারে (অথবা আমি ছোট, যদিও আমি কোনো প্ল্যাটফর্মের যেখানে এই সত্য আমাদের জানা নেই অনুমান) একটি int- এ নয়।
টড গাম্বলিন

উদাহরণস্বরূপ, একটি 64৪ বিট মেশিনে size_tএকটি স্বাক্ষরবিহীন bit৪ বিট পূর্ণসংখ্যা হতে পারে, তবে ৩২ বিট মেশিনে এটি কেবল একটি 32 বিট স্বাক্ষরযুক্ত পূর্ণসংখ্যার হয়।
হার্পডেরপিংটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.