main;
#include <iostream> #include <unistd.h> int main() { for(auto i = 0; i < 1000; i++) std::cout << "Hello world!\n"; fork(); }
#include <iostream> int main() { int array[] = { 1, 2, 3 }; std::cout << (4, (1, 2)[array]) << std::endl; }
#include <regex> #include <iostream> int main() { std::regex re("(.*|.*)*O"); std::string str("0123456789"); std::cout << std::regex_match(str, re); return 0; }
#include <iostream> struct Foo { Foo() { std::cout << "Foo()\n"; } Foo(Foo&&) { std::cout << "Foo(Foo&&)\n"; } Foo(const Foo&) { std::cout << "Foo(const Foo&)\n"; } }; int main() { Foo f; auto a = [f = std::move(f)]() { return std::move(f); }; Foo f2(a()); return 0; }
Foo()
Foo(Foo&&)
Foo(const Foo&)
#include <iostream> int x = 0; int bar(int(x)); int main() { std::cout << bar; }
0
1
0x0
#include <iostream> struct Foo { Foo() { std::cout << "Foo()\n"; } Foo(const Foo&) { std::cout << "Foo(const Foo&)\n"; } Foo(int) { std::cout << "Foo(int)\n"; } Foo(int, int) { std::cout << "Foo(int, int)\n"; } Foo(const Foo&, int) { std::cout << "Foo(const Foo&, int)\n"; } Foo(int, const Foo&) { std::cout << "Foo(int, const Foo&)\n"; } }; void f(Foo) {} struct Bar { int i, j; Bar() { f(Foo(i, j)); f(Foo(i)); Foo(i, j); Foo(i); Foo(i, j); } }; int main() { Bar(); }
Foo(int, int)
Foo(const Foo&, int)
Foo(int, const Foo&)
Foo(int)
সবচেয়ে ছোট প্রোগ্রাম
এটি আইনি সি কোড। এটি সফলভাবে কম্পাইল এবং লিঙ্ক করবে। আপনি এটি চালানোর চেষ্টা করলে এটি ক্র্যাশ হবে। main;
- বৈশ্বিক পরিবর্তনশীল।
সি কোডে আপনি অনেক কিছু বাদ দিতে পারেন। উদাহরণস্বরূপ আপনি একটি গ্লোবাল ভেরিয়েবলের ধরন বাদ দিতে পারেন। ডিফল্ট কম্পাইলার এই ধরনের একটি int
ধরে নিবে। এছাড়াও C তে কোন নেই (C++ এর বিপরীতে), তাই লিঙ্ক করার সময় ফাংশন main
থেকে পরিবর্তনশীল main
আলাদা করার কোন উপায় নেই।
এইভাবে কম্পাইলার বৈধ কোড কম্পাইল করবে, এবং লিঙ্কার একটি প্রোগ্রাম লিঙ্ক করার জন্য অবজেক্ট ফাইলে main
নামে কিছু খুঁজে পাবে।
কাঁটা
এটি C বা C++ বৈশিষ্ট্যের চেয়ে বেশি POSIX বৈশিষ্ট্য। IO অপারেশনের বাস্তবায়ন কর্মক্ষমতা অপ্টিমাইজ করার জন্য বাফার ব্যবহার করে। আপনি যখন fork
চালু করবেন, ওএস প্রসেস মেমরির কপি-অন-রাইট ডুপ্লিকেট তৈরি করবে, IO-বাফারগুলিও সম্ভবত ডুপ্লিকেট হবে এবং বাফারযুক্ত স্ট্রিংগুলি 1000 বারের বেশি মুদ্রিত হবে ।
আপনার যা দরকার তা হল সূচক
উত্তর হল 3
এই কোডটি বোঝার জন্য C এবং C++ এ সূচকগুলি কীভাবে কাজ করে তা আরও ঘনিষ্ঠভাবে দেখে নেওয়া যাক: array[index]
, *(array + index)
এর মতো, (index + array)
এর মতো এবং index[array
এর মতো .
দ্বিতীয় সূত্রটি হল অপারেটর ,
. এর বাইনারি অপারেটর, এটি বাম আর্গুমেন্ট বাতিল করে এবং ডান আর্গুমেন্ট ফেরত দেয়।
নিয়মিত অভিব্যক্তি
কী ঘটবে তা অনুমান করা অসম্ভব ! আচরণ বাস্তবায়ন পর্যন্ত হয়.
আমি আমার পরিবেশ এই প্রোগ্রামটি ব্যতিক্রম উত্থাপন The complexity of an attempted match against a regular expression exceeded a pre-set level.
প্রথম - রেগুলার এক্সপ্রেশনকে সীমাবদ্ধ অটোমেটা O(n**2)
(n - প্যাটার্নের দৈর্ঘ্য), স্ট্রিং O(m)
(m - স্ট্রিংয়ের দৈর্ঘ্য) তে রূপান্তর করুন। এই পদ্ধতি আচরণকে আনলক করে।
যখন আপনি f
সরান তখন আপনি const Foo&&
তৈরি করেন। const Foo&&
একটি অদ্ভুত ধরনের, এইভাবে কম্পাইলার শুধু Foo
কপি করে
auto a = [f = std::move(f)]() mutable { return std::move(f); };
কনস্ট্রাক্টর Foo(const Foo&&)
এক্স এবং বার
প্রোগ্রামটি 1
প্রিন্ট করবে।
int bar(int(x));
— ফাংশন ঘোষণা করার অদ্ভুত উপায়, এটি int bar(int x);
.
আপনি যদি টাইপ কাস্টের সাথে বিভ্রান্ত হন, int bar((int(x)));
- এটি টাইপ কাস্ট।
আমরা নিহিতভাবে bool
ফাংশন অ্যাড্রেস কাস্ট করার চেষ্টা করার চেয়ে, এই জাতীয় কাস্টের ফলাফল সর্বদা true
।
ফাংশন bar()
কখনই ব্যবহার করা হয়নি, এটি আমাদের লিঙ্ক করার সময় অনির্ধারিত প্রতীক ত্রুটিকে ডজ করতে দেয়।
কনস্ট্রাক্টর
শেষ লাইনটি Foo(const Foo&, int)
।
Foo(i)
হল পরিবর্তনশীল ঘোষণা, Foo i
মতই। এভাবে i
নামে ক্লাস মেম্বার এই সুযোগে লুকিয়ে আছে।