क्या कोई std::stoull
है जो basic_string_view
लेता है? मैं केवल std::stoull
को कॉल करने के लिए एक स्ट्रिंग का निर्माण नहीं करना चाहता, खासकर जब से इसे const &
द्वारा लिया जाता है।
यदि कोई मौजूद नहीं है, तो std::basic_string_view
को unsigned long long
में बदलने का प्रभावी तरीका क्या है?
2 जवाब
यदि आप अधिक दक्षता की तलाश में हैं, तो C++17 ने निचले-स्तर के रूपांतरणों को प्रस्तुत किया है। a> <charconv>
में (लाइव उदाहरण):
#include <charconv>
#include <iostream>
#include <string_view>
using namespace std::literals;
int main() {
const auto str = "2048"sv;
unsigned long long result;
auto [ptr, err] = std::from_chars(str.data(), str.data() + str.size(), result);
if (err == std::errc{} && ptr == str.data() + str.size()) {
std::cout << "Entire conversion successful: " << result;
}
}
मेरे द्वारा str.begin()
और str.end()
का उपयोग न करने का कारण यह है कि API सीधे const char*
पर काम करता है, पुनरावृत्त नहीं।
नहीं, ऐसा नहीं है, और cppreference बताते हैं कि क्यों:
stoull
... कॉलstd::strtoull(str.c_str(), &ptr, base)
जिसके लिए एक नल-टर्मिनेटेड स्ट्रिंग की आवश्यकता होती है (जो std::string_view
प्रदान करने का वादा नहीं करता है)।
हालाँकि, ध्यान दें कि std::string
में एक कनवर्टिंग कंस्ट्रक्टर है जो string_view
लेता है ताकि आप लिख सकें:
auto ull = std::stoull (std::string (my_string_view));
जो शायद उतना ही अच्छा समाधान है जितना कोई।
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।