স্প্যান কি কনটেক্সপ্রপ হতে পারে?


11

স্ট্যান্ড :: স্প্যানের সমস্ত কনস্ট্রাক্টরকে কনটেক্সার্প ঘোষণা করা হয়েছে, তবে আমি তাদের কোনওটিই একটি কনস্টেক্সের প্রসঙ্গে কাজ করতে পাইনি বলে মনে হচ্ছে। নীচের যেকোন কনস্টেক্সপ্রকে অনিয়ন্ত্রিত করার ফলে সংকলনের ত্রুটি হবে।

#include <array>
#include <span>

int main()
{
    constexpr int carray[3] = { 0, 1, 2 };
    constexpr std::array<int, 3> array{ 0, 1, 2 };
    using S = std::span<const int, 3>;

    /*constexpr*/ S span1{ array.data(), 3 };
    /*constexpr*/ S span2{array.begin(), array.end()};
    /*constexpr*/ S span3{carray};
    /*constexpr*/ S span4{array};
}

সংক্ষেপে স্প্যান টাইপ তৈরি করা কি আসলেই সম্ভব, যেহেতু মনে হয় যে কম্পাইলারের সময়ে নির্মাতারা কখনই পয়েন্টার বা রেফারেন্স শুরু করতে হয় তা কখনই মূল্যায়ন করা যায় না?


কনটেক্সাররা তাদের অপসারণ করবেন না com
Andreas Loanjoe

আপনি একটি রানটাইম স্প্যান শুরু করছেন আমি বোঝাতে চেয়েছি একটি কনস্টেক্সপ্র্যান স্প্যান শুরু করতে পারি
Andreas Loanjoe

ডোহ। আমি কেন এটি নিশ্চিত না। কিছুই নয়
নাথান ওলিভার

অদ্ভুত, দেখুন না কেন এটি প্রয়োজনীয় হবে স্প্যান কেবল যেভাবেই স্থানীয় স্কোপের অভ্যন্তরে বাস করে ...
Andreas Loanjoe

নিবিড়ভাবে সম্পর্কিত: stackoverflow.com/q/57545503/2069064
ব্যারি

উত্তর:


13

এর মতো ধ্রুবক প্রকাশে আপনি নন-স্ট্যাটিক ফাংশন স্থানীয় ভেরিয়েবলগুলি ব্যবহার করতে পারবেন না। আপনার ঠিকানার স্থায়িত্ব প্রয়োজন এবং এটি কেবল স্থির বস্তু দ্বারা অর্জন করা সম্ভব। কোডটি সংশোধন করা হচ্ছে

constexpr std::array<int, 3> array{ 0, 1, 2 };
constexpr int carray[3] = { 0, 1, 2 };

int main()
{
    using S = std::span<const int, 3>;

    constexpr S span1{ array.data(), 3 };
    constexpr S span2{array.begin(), array.end()};
    constexpr S span3{carray};
    constexpr S span4{array};
}

অথবা

int main()
{
    static constexpr std::array<int, 3> array{ 0, 1, 2 };
    static constexpr int carray[3] = { 0, 1, 2 };
    using S = std::span<const int, 3>;

    constexpr S span1{ array.data(), 3 };
    constexpr S span2{array.begin(), array.end()};
    constexpr S span3{carray};
    constexpr S span4{array};
}

আপনাকে একটি তৈরি করতে দেয় constexpr std::span


5
ব্যাপ্তি সমস্যা নয়। স্টোরেজ সময়কাল হয়। স্থির স্থানীয় কাজ করা উচিত।
এরেরিকা

এটি সমস্ত কাজ করে যদি কোনও ফাংশনের মধ্যে constexpr(স্পষ্টতই না static) স্থানীয় বস্তুগুলি কাজ করে It এই ধরণের অবজেক্টগুলির ডিফল্ট স্ট্যাটিক স্টোরেজ সময়কাল থাকে বা এটি কিছু আলাদা?
n314159

@ n314159 আমি নিশ্চিত না যে এটি অনুমোদিত হয়েছে কিনা বা আপনি যদি আতঙ্কিত হয়ে পড়েছেন: যদি কনসেক্সট্রপ ফাংশনের কোনও বিশেষায়নের কোনও মূল ধ্রুবক প্রকাশ না হয় তবে ফাংশনটি দুর্গঠিত, কোনও ডায়াগনস্টিকের প্রয়োজনীয় ধারা নেই। [expr.const] / 10 কেবল স্থিতিশীল ভেরিয়েবলের অনুমতি দেয়।
নাথান অলিভার

@ n314159: আমি নিশ্চিত আপনি ঠিক কাজ (বা "কাজ") কি বলছে তা, কিন্তু একটি ধ্রুবক অভিব্যক্তি হিসাবে কিছু ব্যবহার মধ্যে পার্থক্য সতর্কতা অবলম্বন করা আবশ্যক নই মধ্যে একটি ফাংশন (constexpr অথবা কোন) এবং কিছু ব্যবহার গঠন করা একটি ধ্রুবক একটি কনটেক্সার্প ফাংশনের মাধ্যমে অভিব্যক্তি ।
ডেভিস হেরিং

আপনি যে অ স্ট্যাটিক (ধ্রুব) বলতে চাই পারে মান ধ্রুবক এক্সপ্রেশন ব্যবহার করা যেতে পারে, কিন্তু না তাদের ঠিকানাগুলি
ডেভিস হ্যারিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.