ফাংশন সম্পর্কিত এই উত্তরগুলির মধ্যে কোনটি ভুল?


17

সুতরাং আমি যখন দীর্ঘতর সংকলন করছিলাম তখন আমি ওডেস্কে সি ++ সাধারণ পরীক্ষা নেওয়ার সিদ্ধান্ত নিয়েছি এবং এই প্রশ্নটি এসেছি।

এই প্রশ্ন

যদি আমি ভুল না হয়ে থাকি তবে এই শব্দগুলির (বা এর অভাব) দেওয়া সমস্ত কিছুই সত্য হতে পারে।

ক।

int Foo() { }
int Foo(int bar) { }

খ। ভাল, return void;শব্দার্থগতভাবে ভুল হবে তবে ফাংশনগুলিতে স্পষ্টতই voidরিটার্নের ধরণ থাকতে পারে।

void Foo() { }

গ। এটি হ'ল ইনলাইন ফাংশনগুলির সংজ্ঞা।

ঘ। নিম্নলিখিত উপাদানগুলির স্থান নির্ধারণ সম্পর্কে খুব বিশদে না গিয়ে,

typedef void (*Func)(int);

Func functions[2];

void Foo(int bar) { }
void Bar(int foo) { }

functions[0] = &Foo;
functions[1] = &Bar;

আরও, আপনি সর্বদা ল্যাম্বডাস এবং ফান্ট্যাক্টর ব্যবহার করে এটি করতে পারেন ।

ঙ।

void Foo(int& bar)
{
    ++bar;
}

int foobar = 5;
Foo(foobar);

চ।

int bar = 5;

int& GetBar()
{
    return bar;
}

GetBar() = 6;

ছ।

int bar = 5;

int* GetBar()
{
    return &bar;
}

(*GetBar()) = 5;

এই প্রশ্নের কোন সত্যিকারের ভ্রান্ত উত্তর রয়েছে তা দেখতে আমি ব্যর্থ । আমি কিছু অনুপস্থিত করছি?

বলার অপেক্ষা রাখে না যে আমি সময়ের বাইরে গিয়ে পুরো বিষয়টি ব্যর্থ করেছি failed আমার ধারণা আমি খারাপ সি ++ প্রোগ্রামার। :(


18
কিছু বাচ্চা বাড়ির কাজ আটকে দেখে চিৎকার করতে এসেছিল, আনন্দিতভাবে অবাক হয়েছিল।
সোমকিটস

আসলে সমস্ত ভাষার প্রয়োজন হয় না যে ইনলাইন কার্যগুলি প্রসারিত করা উচিত। "ইনলাইন" হ'ল ডেলফির কমান্ডের চেয়ে একটি সংকলক ইঙ্গিত এবং সি, সি ++ ব্যতিক্রম । সুতরাং "সি" টিও ভুল হতে পারে। প্রতিটি বিবৃতি কীভাবে ভুল হতে পারে তা দেখিয়ে উত্তর লিখতে আরও মজাদার হতে পারে।
এম

1
@ Only যদি কেবল একটি পাঠ্য বাক্স থাকে। আমি ফিরে যেতে এবং "এই প্রশ্নটি দিয়ে একটি সমস্যা প্রতিবেদন করুন" চাপতে চাই।
কিউস

5
এটি ফাংশনগুলির একটি অ্যারে নয়। এটি ফাংশন পয়েন্টারগুলির একটি অ্যারে।
ব্যবহারকারী 253751

@ মিম্বিস সত্য, তবে প্রশ্নটি আসলে স্পষ্ট করে না (কমপক্ষে আমার কাছে এটি তা হয়নি)।
কিউস

উত্তর:


21

এই পুরো প্রশ্নটি অদ্ভুত। প্রশ্ন বিবৃতিটি একাধিক পছন্দের সম্ভাবনা বোঝায়, যখন রেডিও বোতামগুলি একক পছন্দকে নির্দেশ করে indicates

তদ্ব্যতীত, বি বেশ সন্দেহজনক, কারণ শূন্য ফাংশনগুলি কোনও কিছু ফেরত দেয় না।

ডি এছাড়াও প্রশ্নবিদ্ধ, যতদূর আমি জানি, আপনার ফাংশনগুলির একটি অ্যারে থাকতে পারে না। অবশ্যই, আপনার কাছে ফাংশন পয়েন্টারগুলির একটি অ্যারে থাকতে পারে তবে এটি একই জিনিস নয়।


রাইট; ডি জিজ্ঞাসা করার মতো যে আপনি কোনও কল করতে পারেন কিনা int। অবশ্যই, আপনি যদি এটি কোনও পয়েন্টারে ফেলে দেন এবং সেই পয়েন্টারটি কোনও ফাংশনকে বোঝায় ...
কিউস

1
আমি ডি বাজি ধরতে রাজি হ'ল তারা যে উত্তরটি খুঁজছে, তবে হ্যাঁ, প্রশ্নটি খুব খারাপ।
রোবট

যদিও voidফাংশন কোন রিটার্ন না মান , তারা এখনও ফিরে আসতে টাইপ void । এভাবে আমি বলি খ সত্য is
টমাস এডিং

@ থমাসডিং এটি এখনও তাদের পক্ষে সত্যই খারাপ শব্দ ing আপনি না return void;, পরিবর্তে return;
কিউস

10

উত্তর গ) তর্কযুক্তও মিথ্যা।

"অনুরোধ ওভারহেড এড়াতে সংকলনের সময় ইনলাইন ফাংশনগুলি প্রসারিত করা হয়।"

প্রথমত, সি ++ সংকলকটির inlineকার্যকারিতা একেবারে প্রসারিত না করে ইঙ্গিতটিকে উপেক্ষা করার অনুমতি দেওয়া হয় ।

দ্বিতীয়ত, সম্প্রসারণ করার জন্য বর্ণিত "কারণ" হ'ল একটি ওভারসিম্প্লিফিকেশন। আসলে, সম্প্রসারণ (বা না) করার আসল কারণটি সম্পূর্ণরূপে সংকলক লেখকের হাতে।


আপনি সঠিক, তবে আমি 'ঠিক আছে' অর্থে এটি সম্পর্কে ভাবছিলাম , সংকলকটিinline ইঙ্গিতের পরিবর্তে নির্ধারণ করেছে যে এটি কোনও ফাংশনটি ইনলাইন করতে চায় না
কিউস

ঠিক আছে, সংকলক ইঙ্গিতটি সম্পূর্ণ উপেক্ষা করতে পারে না। কমপক্ষে এটি বাধ্যতামূলক প্রভাব, ওডিআরকে ব্যতিক্রম করে।
ডিসিপ্লিকেটর

@ প্রতিলিপি - হ্যাঁ পারে। "আপনি কোনও ফাংশনটিকে ইনলাইন হিসাবে কীভাবে নির্ধারণ করেন তা বিবেচনা না করেই, এটি একটি অনুরোধ যা সংকলকটিকে উপেক্ষা করার অনুমতি দেওয়া হয়েছে: সংকলকটি কিছু, সমস্ত, বা যে কোনও জায়গাকে আপনি ইনলাইন হিসাবে মনোনীত ফাংশন বলছেন এমন কোনও জায়গায় ইনলাইন-প্রসারিত করতে পারে" " - উত্স isocpp.org/wiki/faq/Inline-Funifications
স্টিফেন সি

@ স্টেফেনসি: এটির ইনলাইন প্রসারিত করার অনুরোধটি এড়ানো যেতে পারে, হ্যাঁ। আমি কেবল বলেছিলাম যে ওডিআরের সুস্পষ্ট ব্যতিক্রমটি তা করতে পারে না।
ডিসিপ্লিকেটর

আমি দেখি. আমি আমার উত্তরটির শব্দটি আপডেট করেছি
স্টিফেন সি

7

গ। এটি হ'ল ইনলাইন ফাংশনগুলির সংজ্ঞা।

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

সুতরাং, কঠোরভাবে বলতে গেলে, বিকল্প সিটি ভুল, তবে আমি মনে করি না যে কুইজের লেখকরা যে উত্তরটি প্রত্যাশা করেছিলেন এটিই উত্তর, কারণ এমন একটি উত্তর রয়েছে যা আরও বেশি ভুল।

ঘ। নিম্নলিখিত উপাদানগুলির স্থান নির্ধারণ সম্পর্কে খুব বিশদে না গিয়ে,

typedef void (*Func)(int);

Func functions[2];

void Foo(int bar) { }
void Bar(int foo) { }

functions[0] = &Foo;
functions[1] = &Bar;

আরও, আপনি সর্বদা ল্যাম্বডাস এবং ফান্ট্যাক্টর ব্যবহার করে এটি করতে পারেন।

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

সি ++ এ ফাংশনগুলি কিছুটা দ্বিতীয়-শ্রেণীর নাগরিকের মতো। আপনি এগুলি সংজ্ঞায়িত করতে এবং কল করতে পারেন, তবে আপনি কোনও ফাংশনের ধরণের (যেমন একটি অ্যারে তৈরি করা) দিয়ে অন্য কিছু করার চেষ্টা করার সাথে সাথে আপনি ত্রুটি পান বা তারা নিঃশব্দে নিজেকে পয়েন্টারে রূপান্তরিত করে।


আমি ডি বিটের সাথে একমত, তবে আমি cফাংশন হিসাবে পড়ছিলাম যা ইতিমধ্যে ইনলাইনিংয়ের জন্য ইতিবাচকভাবে চিহ্নিত হয়েছে, বনামinline কীওয়ার্ড । আমি বুঝি inlineএকটি ইঙ্গিত।
কিউস

4

যদি কিছু হয় তবে তা । আপনি returnএকটি পারবেন না void, তবে আপনি ফিরে আসতে পারেন null। ফাংশন ঘোষণার অযোগ্য হওয়া কোনও প্রত্যাবর্তিত মানের অভাবের সংকলককে অবহিত করতে হবে।

অকার্যকর প্রকার

সি এবং সি ++ এ

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


2
-1: voidফাংশনগুলি কোনও মান ফেরত দেয় না , তারা এখনও টাইপটি ফেরত দেয় void। এভাবে আমি বলি খ সত্য is
টমাস এডিং

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