草庐IT

number_string

全部标签

c++ - 在库的公共(public) API 中从 std::string、std::ostream 等过渡

对于具有相同二进制文件的多个工具链之间的API/ABI兼容性,它是wellknownthatSTL容器、std::string和其他标准库类(如iostreams)在公共(public)header中禁止。(异常(exception)情况是,如果一个人为每个版本的受支持工具链分发一个构建;一个人提供没有二进制文件的源代码供最终用户编译,这在当前情况下不是首选选项;或者一个人内联转换为其他容器,以便不同的std实现不会被库吸收。)如果一个人已经有一个不遵循此规则的已发布库API(请friend),那么最好的前进道路是什么,同时保持尽可能多的向后兼容性,并尽可能地支持编译时中断'吨?我需要

c++ - std::string 类继承和繁琐的 C++ 重载解析

我需要扩展std::basic_string来处理路径字符串和不同的operator+:#includetemplateclasspath_basic_string:publicstd::basic_string{public:usingbase_type=std::basic_string;path_basic_string()=default;path_basic_string(constpath_basic_string&)=default;path_basic_string&operator=(constpath_basic_string&)=default;path_basi

c++ - 如何用 vstring 替换 std::string?

我最近了解到,几年前库libstdc++包含vstring(也称为versa_string),它提供与std::相同的功能:string,但显然更符合C++标准。我曾尝试使用vstring来替代std::string,但我发现没有简单的方法来做到这一点。是否有一种简单的方法可以在不更改libstdc++源的情况下将std::string替换为vstring?我可以用别名替换代码中对std::string的所有使用,如以下list所示。然而,这种方法的问题是,std::string也在某些地方内部使用,例如在std::ostringstream中。这意味着语句std::ostringst

c++ - 莱克斯/柔性 :Regular expression for string literals in C/C++?

我看这里ANSICgrammar.本页包含大量用于ANSIC的Lex/Flex正则表达式。在理解字符串文字的正则表达式时遇到问题。他们提到正则表达式为\"(\\.|[^\\"])*\"据我所知,\"用于双引号,\\用于转义字符,.用于任何字符,除了escapecharacter和*为零次或多次。[^\\"]表示除\、"之外的字符。所以,在我看来,正则表达式应该是\"(\\.)*\"。你能给出一些上面的正则表达式会失败的字符串吗?或为什么他们使用了[^\\"]? 最佳答案 正则表达式\"(\\.)*\"您建议的匹配字符串由\组成符号与

c++ - 声明硬编码 std::string 会导致缓冲区溢出

我的程序中有以下行会导致运行时警告:if(!is_directory("C:\\NGFMS_Debug\\Files")&&!create_directories("C:\\NGFMS_Debug\\Files"))警告的文本​​是这样的:“XXX.exe中发生了缓冲区溢出,它破坏了程序的内部状态。”警告出现在对“is_directory(...)”的调用中。我猜字符串的空间没有分配,但我认为这样的语法是合法的。is_directory函数是boost/filesystem.hpp的一部分,我正在使用以下命名空间:usingnamespaceboost;usingnamespacebo

c++ - 如何在 C++11 中将 u32string 转换为 int?

我们如何在C++11中将u32string转换为int?另外,我应该使用什么方法将此类字符串的一部分转换为int-让开始和结束迭代器可用?我试过:u32stringtest=U"14";cout但它抛出:candidatefunctionnotviable:noknownconversionfrom'constchar32_t*'to'constchar*'for1stargumentexternintatoi(__constchar*__nptr) 最佳答案 #include//wstring_convert#include//c

c++ - 标准是否保证 string::erase 和 string::pop_back 不重新分配内存?

标准是否保证string::erase和string::pop_backNOT重新分配内存?删除一些元素后,string会不会自动收缩?我检查了标准,它说string::erase和string::pop_back要么抛出std::out_of_range要么什么都不抛.我可以将其作为这些方法NOT进行任何重新分配的保证吗?因为重新分配可能会抛出bad_alloc。 最佳答案 不,明智的实现可能不会重新分配,但标准不保证这些方法调用不会重新分配,标准在要求中说:References,pointers,anditeratorsrefe

c++ - 如何将 std::string 拆分为 std::string_views 的范围 (v3)?

我需要在所有空格处拆分一个std::string。然而,结果范围应该将其元素转换为std::string_view。我正在为范围的“元素类型”而苦苦挣扎。我猜,类型类似于c_str。如何将“拆分”部分转换为string_view?#include#include#include"range/v3/all.hpp"intmain(){std::strings="thisshouldbesplitintostring_views";autoview=s|ranges::view::split('')|ranges::view::transform(std::string_view);}

c++ - 为什么在 gcc 中允许带有 std::string 的模板化 constexpr?

为什么gcc允许编译模板版本?它是编译器错误还是与模板一起使用时实际上有效?有人可以给我解释一下吗?它不能在clang或godbolt.org上使用的其他编译器上编译。编译错误是由在constexpr中使用的字符串和字符串流产生的。#include#include#includetemplateconstexprstd::stringfunc1(Ta,Tb)//Compilesandruns{std::stringstreamss;ss 最佳答案 GCC可能就在这里。根据dcl.constexpr第6段:Iftheinstantia

c++ - msvc/permissive- std::string 重载运算符 '=' 不明确

它用/permissive编译,但用/permissive-编译失败。什么不符合要求以及如何解决?为什么在(2)中没问题,但在(4)(3)中失败了?如果我删除operatorlong也可以。如何在不更改调用站点(3,4)的情况下修复它?#includestructmy{std::stringmyVal;my(std::stringval):myVal(val){}operatorstd::string(){returnmyVal;};operatorlong(){returnstd::stol(myVal);};};intmain(){structMyStruct{longn=my("