C/C++开发

为什么不应该从 c++ std 字符串类派生?

我想问一下 Effective C++ 中提出的一个具体观点. 它说: 如果一个类需要像一个多态类一样运行,那么析构函数应该是虚拟的.它还进一步补充说,由于 std::string 没有虚拟析构函数,因此永远不应从中派生.另外 std::string 甚至都没有被设计为基类,忘记多态基类. 我不明白要成为基类(不是多态类)的类具体需要什么? 我不应该从 std::strin ..
发布时间:2021-12-05 15:05:19 C/C++开发

C++将字符串转换为十六进制,反之亦然

在 C++ 中将字符串转换为十六进制以及反之的最佳方法是什么? 示例: 像 "Hello World" 这样的字符串转成十六进制格式:48656C6C6F20576F726C64 从十六进制 48656C6C6F20576F726C64 到字符串:"Hello World" 解决方案 像“Hello World"这样的字符串到十六进制格式:48656C6C6F20576F ..
发布时间:2021-12-05 15:04:32 C/C++开发

为什么省略“#include "?只是有时会导致编译失败?

我是 C++ 的初学者.当我编写代码时,有时我会写 #include 并且代码有效,有时我不写 #include 并且代码没有不行.但有时它可以在没有 #include 的情况下工作. 那么我是否必须编写 #include 才能使代码有效? 解决方案 如果您使用在标准标头 string 内声明的成员,那么是的,您必须直接或间接包含该标头(通过其他标题). 某些 ..
发布时间:2021-12-05 15:03:38 C/C++开发

std::string::c_str() 结果的生命周期是多少?

在我的一个程序中,我必须与一些使用 const char* 的遗留代码交互. 假设我有一个如下所示的结构: struct Foo{const char* 服务器;const char* 名称;}; 我的上层应用只处理std::string,所以想到了用std::string::c_str()来取回const char* 指针. 但是 c_str() 的生命周期是多少? 我可以 ..
发布时间:2021-12-05 15:02:22 C/C++开发

libc++ 中短字符串优化的机制是什么?

这个答案 对短字符串优化 (SSO) 进行了很好的高级概述.但是,我想更详细地了解它在实践中是如何工作的,特别是在 libc++ 实现中: 字符串必须有多短才能符合 SSO 的条件?这是否取决于目标架构? 实现上是如何区分short和long的访问字符串数据时的字符串?它是像 m_size 一样简单还是作为其他成员变量的一部分的标志?(一世想象一下 m_size 或它的一部分也可能用于 ..
发布时间:2021-12-05 15:00:06 C/C++开发

C++ 已弃用从字符串常量到“char*"的转换

我有一个带有 private char str[256]; 的类 为此我有一个显式构造函数: 显式 myClass(const char *func){strcpy(str,func);} 我称之为: myClass obj("example"); 当我编译它时,我收到以下警告: 不推荐将字符串常量转换为 'char*' 为什么会这样? 解决方案 当您遇到以下情况时 ..
发布时间:2021-12-05 14:59:57 C/C++开发

从 C++ 中的 std::string 中删除空格

在 C++ 中从字符串中删除空格的首选方法是什么?我可以遍历所有字符并构建一个新字符串,但有没有更好的方法? 解决方案 最好的做法是使用算法 remove_if 和 isspace: remove_if(str.begin(), str.end(), isspace); 现在算法本身不能改变容器(只能修改值),所以它实际上将值打乱并返回一个指向现在结束位置的指针.所以我们必须调用str ..
发布时间:2021-12-05 14:57:16 C/C++开发

将 std::__cxx11::string 转换为 std::string

我用的是c++11,但也有一些库没有为它配置,需要一些类型转换.特别是我需要一种将 std::__cxx11::string 转换为常规 std::string 的方法,但是谷歌搜索我找不到这样做的方法并把前面的(string)不起作用. 如果我不转换,我会收到这样的链接器错误: 未定义引用`H5::CompType::insertMember(std::__cxx11::basic_st ..
发布时间:2021-12-05 14:54:45 C/C++开发

С++ 中的字符串文字是在静态内存中创建的吗?

c++ 中的字符串字面量是否在静态内存中创建并仅在程序退出时销毁? 解决方案 它的创建位置实际上是编译器编写者的实现决定.最有可能的是,字符串文字将存储在内存的只读段中,因为它们永远不会改变. 在过去的编译器时代,您曾经拥有像这些文字这样的静态数据,以及全局但可变的数据.这些被存储在 TEXT(代码)段和 DATA(初始化数据)段中. 即使你有像 char *x = "hell ..
发布时间:2021-12-05 14:51:22 C/C++开发

有没有一种简单的方法可以将 C++ 枚举转换为字符串?

假设我们有一些命名的枚举: enum MyEnum {福,酒吧 = 0x50}; 我用谷歌搜索的是一个脚本(任何语言),它扫描我项目中的所有标题并生成一个每个枚举一个函数的标题. char* enum_to_string(MyEnum t); 还有一个类似这样的实现: char* enum_to_string(MyEnum t){开关(t){案例 FOO:返回“FOO";案例栏:返回“酒 ..
发布时间:2021-12-05 14:47:36 C/C++开发

什么是 C++ 的最佳开放 XML 解析器?

我正在寻找一个简单、干净、正确的 XML 解析器以在我的 C++ 项目中使用.我应该自己写吗? 解决方案 RapidXML?RapidXML 是一个用 C++ 编写的非常快速和小型的 XML DOM 解析器.它主要针对嵌入式环境、计算机游戏或任何其他需要可用内存或 CPU 处理能力的应用程序.RapidXML 在 Boost 软件许可下获得许可,其源代码可免费获得. 功能 解析 ..
发布时间:2021-12-03 14:00:48 C/C++开发

如何从 ruby​​ 中调用 C++ 函数

我是一名经验丰富的 C/C++ 开发人员,但我是 Ruby 的新手. 如何在 Ruby 中调用 C++ 函数? 解决方案 你有 3 种可能性: 1) Ruby 能够加载库.即使有点棘手,您也可以决定编写自己的加载程序并在 Ruby 中绑定您的 C++ 库.这是使用所谓的扩展模块完成的.您可以在此处找到综合教程:http://www.rubyinside.com/how-to-c ..
发布时间:2021-12-03 09:59:05 C/C++开发

如何使用 std::regex 匹配多个结果

例如.如果我有一个像“first second third Fifth"这样的字符串,并且我想在一个操作中匹配每个单词以一个一个地输出它们. 我只是认为“(\b\S*\b){0,}"会起作用.但实际上并没有. 我该怎么办? 这是我的代码: #include#include使用命名空间标准;int main(){正则表达式 ("(\\b\\S*\\b)");匹配资源;string ..
发布时间:2021-12-03 00:04:46 C/C++开发

用于检测 & 分号终止的 C++ 的正则表达式while 循环

在我的 Python 应用程序中,我需要编写一个正则表达式来匹配以分号 (;).例如,它应该匹配: for (int i = 0; i ...但不是这个: for (int i = 0; i 这乍一看似乎微不足道,直到您意识到左括号和右括号之间的文本可能包含其他括号,例如: for (int i = funcA(); i 我正在使用 python.re 模块.现在我的正则表达式看 ..
发布时间:2021-12-02 23:51:28 C/C++开发

strptime() 在 Windows 上等价?

是否有适用于 Windows 的 strptime() 的等效实现?不幸的是,这个 POSIX 函数似乎不可用. strptime 的开放组描述 - 总结:它转换文本将"MM-DD-YYYY HH:MM:SS"等字符串转化为tm struct,与strftime()相反.> 解决方案 strptime() 的开源版本(BSD 许可)可以在这里找到:http://cvsweb.netbsd ..
发布时间:2021-12-02 08:29:39 C/C++开发

为什么 C++ 需要对 malloc() 进行强制转换,而 C 不需要?

我一直对此很好奇 - 为什么在 C++ 中我必须从 malloc 转换返回值,而不是在 C 中? 以下是 C++ 中有效的示例: int *int_ptr = (int *)malloc(sizeof(int*)); 这是 C++ 中不起作用的示例(无强制转换): int *int_ptr = malloc(sizeof(int*)); 我听说在 C 中,实际上,从 malloc() ..
发布时间:2021-12-02 08:29:28 C/C++开发

检测 C/C++ 中的有符号溢出

乍一看,这个问题似乎是 How检测整数溢出?,但实际上有很大不同. 我发现虽然检测无符号整数溢出非常简单,但检测 C/C++ 中的有符号溢出实际上比大多数人想象的要困难. 最明显但最幼稚的方法是: int add(int lhs, int rhs){int sum = lhs + rhs;if ((lhs >= 0 && sum ..
发布时间:2021-12-02 08:29:11 C/C++开发

为什么全局变量和静态变量被初始化为它们的默认值?

在 C/C++ 中,为什么将全局变量和静态变量初始化为默认值? 为什么不只留下垃圾值呢?有什么特别的吗这是什么原因? 解决方案 安全:单独保留内存会泄漏其他进程或内核的信息. 效率:这些值在初始化为某些东西之前是无用的,并且在具有展开循环的块中将它们归零更有效.操作系统甚至可以在系统空闲时将空闲列表页面归零,而不是在某些客户端或用户等待程序启动时. 可再现性:不考虑这 ..
发布时间:2021-12-02 08:28:53 C/C++开发

函数指针的意义是什么?

我看不到函数指针的效用.我想它在某些情况下可能很有用(毕竟它们存在),但我想不出使用函数指针更好或不可避免的情况. 你能举一些很好地使用函数指针的例子吗(在 C 或 C++ 中)? 解决方案 大多数例子都归结为回调:你调用一个函数 f()code> 传递另一个函数的地址 g(),并且 f() 调用 g() 来执行某些特定任务.如果你把f()的地址传给h(),那么f()会回调h()代码 ..
发布时间:2021-12-02 08:28:25 C/C++开发