আমি আপনার শেষ প্রশ্ন থেকে শুরু করব
এছাড়াও, কেন সংকলক বা আইডিই প্রধান () কোনও int না ফেরানোর বিষয়ে অভিযোগ করে না?
সি ++ স্ট্যান্ডার্ড অনুযায়ী (6.6.1 মূল ফাংশন)
5 মূলত একটি রিটার্ন স্টেটমেন্টটি মূল ফাংশনটি ছেড়ে দেওয়ার (স্বয়ংক্রিয় স্টোরেজ সময়কাল সহ যে কোনও বস্তু ধ্বংস করে) এবং std :: প্রস্থানটিকে আর্গুমেন্ট হিসাবে রিটার্ন মান সহকারে ডেকে আনার প্রভাব ফেলে। যদি নিয়ন্ত্রণ যৌগিক-বিবৃতিটির শেষের প্রান্তে প্রবাহিত হয়, তবে প্রভাবটি অপারেন্ড 0 সহ একটি রিটার্নের সমান (এছাড়াও 18.3 দেখুন)।
এবং এই প্রশ্নের সাথে আপেক্ষিক
এটি কীভাবে সম্ভব, যেহেতু y = 5 কোনও গণনাকারী প্রকাশ নয়?
সি ++ স্ট্যান্ডার্ড থেকে (8.18 অ্যাসাইনমেন্ট এবং যৌগিক অ্যাসাইনমেন্ট অপারেটর)
1 অ্যাসাইনমেন্ট অপারেটর (=) এবং যৌগিক নিয়োগ অপারেটরগুলি সমস্ত গ্রুপকে ডান থেকে বামে। সবার জন্য তাদের বাম অপারেন্ড হিসাবে একটি পরিবর্তনযোগ্য লভ্যালু প্রয়োজন এবং বাম অপারেন্ডকে উল্লেখ করে একটি লভালিউটি ফিরিয়ে দিন।
এই ঘোষণা স্প
int x{ y = 5 };
সমানভাবে দুটি বিবৃতি বিভক্ত করা যেতে পারে
y = 5;
int x{ y };
এছাড়াও সি ++ এর মধ্যে আপনি নিম্নলিখিত ভেরিয়েবলের জন্য একটি রেফারেন্স তৈরি করতে পারেন
int &x{ y = 5 };
এখানে একটি বিক্ষোভমূলক প্রোগ্রাম
#include <iostream>
int main()
{
int y;
int &x{ y = 5 };
std::cout << "y = " << y << '\n';
x = 10;
std::cout << "y = " << y << '\n';
}
এর আউটপুট হয়
y = 5
y = 10
আপনি এই ঘোষণা করতে পারেন
int x{ y = 5 };
আবারও লিখুন
int x = { y = 5 };
তবে এটিকে (উপরোক্ত ঘোষণার মতো দেখতে একইভাবে) দুটি ঘোষণার মধ্যে পার্থক্য রয়েছে তা বিবেচনা করুন।
auto x{ y = 5 };
এবং
auto x = { y = 5 };
প্রথম ঘোষণায় ভেরিয়েবলের x
টাইপ থাকে int
। দ্বিতীয় ঘোষণায় ভেরিয়েবলের x
প্রকার রয়েছে std::initializer_list<int>
।
পার্থক্যটিকে আরও দৃশ্যমান করার জন্য দেখুন কীভাবে বস্তুর মানগুলি আউটপুট হয়।
#include <iostream>
int main()
{
int y;
auto x1 { y = 5 };
std::cout << "x1 = " << x1 << '\n';
auto x2 = { y = 10 };
std::cout << "*x2.begin()= " << *x2.begin() << '\n';
std::cout << "y = " << y << '\n';
return 0;
}
প্রোগ্রাম আউটপুট হয়
x1 = 5
*x2.begin()= 10
y = 10
y = 5
এটি একটি অভিব্যক্তি, এবং এর মান রয়েছে5
। আপনি কেন মনে করেন না?