[=] সি ++ এর অর্থ কী?


94

আমি জানতে চাই কি [=]করে? একটি সংক্ষিপ্ত উদাহরণ এখানে

template <typename T>
std::function<T (T)> makeConverter(T factor, T offset) {
    return [=] (T input) -> T { return (offset + input) * factor; };
}

auto milesToKm = makeConverter(1.60936, 0.0);

[]পরিবর্তে কোডটি কীভাবে কাজ করবে [=]?

আমি মনে করি যে

std::function<T (T)>

একটি ফাংশন প্রোটোটাইপ যা (T)যুক্তি এবং রিটার্ন টাইপ হিসাবে পায় T?


4
এটি বিচিত্রভাবে এমন কোনও কিছুর পক্ষে খুব বেশি ভোট দেওয়া হয়েছে যা মনে হয় 3 টি পৃথক অপরিবর্তিত প্রশ্ন জিজ্ঞাসা করেছে এবং এটি C ++ 11 এ ল্যাম্বডা এক্সপ্রেশন কী?
আন্ডারস্কোর_ডি

আমি @sindcore_d এর সাথে একমত - মনে হচ্ছে কিছু ক্লিক রেটিং বাড়িয়ে দিচ্ছে, তাই না? :)
বিটটিকলার

উত্তর:


108

[=]আপনি উল্লেখ করছি অংশ ক্যাপচার তালিকা ল্যামডা প্রকাশের জন্য। এটি সি ++ কে জানায় যে ল্যাম্বডা এক্সপ্রেশনটির অভ্যন্তরীণ কোডটি আরম্ভ করা হয়েছে যাতে লাম্বদা তৈরি হওয়ার সময় এটি ব্যবহার করে এমন সমস্ত স্থানীয় ভেরিয়েবলের একটি অনুলিপি পায়। ল্যাম্বডা এক্সপ্রেশনটি উল্লেখ করতে সক্ষম হওয়ার জন্য এটি প্রয়োজনীয় factorএবং offsetএটি ফাংশনের অভ্যন্তরে স্থানীয় ভেরিয়েবল।

আপনি যদি এর [=]সাথে প্রতিস্থাপন করেন তবে আপনি []একটি সংকলক ত্রুটি পাবেন কারণ ল্যাম্বডা এক্সপ্রেশনটির অভ্যন্তরের কোডটি ভেরিয়েবলগুলি কী offsetএবং কী factorউল্লেখ করবে তা জানতে পারে না । আপনি যদি এটি করেন তবে অনেক সংকলক ভাল ডায়াগনস্টিক ত্রুটি বার্তা দেয়, তাই এটি চেষ্টা করে দেখুন কী ঘটে!


13
"এটি প্রয়োজনীয়" - এই সঠিক বিকল্পটি প্রয়োজনীয় নয়; আমরা লিখতে পারি [&], [=offset, =input]ইত্যাদি
এম এম

4
@ এমএম - সেই ক্যাপচারটি কি স্থানীয়দের কাছে উল্লেখ করে না?
অযথা

4
@ এমএম এখানে রেফারেন্স ক্যাপচার ব্যবহার করা সমস্যা হবে কারণ ল্যাম্বদা ফিরে আসার সাথে সাথে সেই স্থানীয় ভেরিয়েবলগুলির জীবনকাল শেষ হয়ে যাবে। আপনি ঠিক বলেছেন যে আমরা পৃথকভাবে পৃথক পৃথক ভেরিয়েবল তালিকাবদ্ধ করতে পারি।
টেম্পলেটটিফাইফ

46

এটি একটি ল্যাম্বদা ক্যাপচার তালিকা। ল্যাম্বদার জন্য ভেরিয়েবলগুলি উপলব্ধ করে। আপনি [=]মান দ্বারা কোন অনুলিপিগুলি ব্যবহার করতে পারেন , বা [&]কোনটি রেফারেন্স দিয়ে যায় passes


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