c++-faq相关内容

以下短语在 C++ 中的含义是什么:零初始化、默认初始化和值初始化?

以下短语在 C++ 中的含义: 零初始化, 默认初始化,以及 值初始化 C++ 开发人员应该对它们了解多少? 解决方案 需要意识到的一点是,“值初始化"是 C++ 2003 标准中的新内容——它在 1998 年的原始标准中不存在(我认为可能是唯一不仅仅是澄清的区别).请参阅 KirillV. Lyadvinsky 对直接来自标准的定义的回答. 请参阅关于 op ..
发布时间:2022-01-18 23:07:05 C/C++开发

类型名称后的括号是否与 new 不同?

如果'Test'是一个普通的类,有什么区别: Test* test = new Test; 和 Test* test = new Test(); 解决方案 让我们学以致用,因为存在实际上会影响代码行为的差异.以下大部分内容来自对“旧新事物"文章的评论. 有时 new 运算符返回的内存会被初始化,有时它不会取决于您要更新的类型是否为 POD(普通旧数据),或者如果它是一个包含 POD ..
发布时间:2022-01-18 23:05:52 C/C++开发

C++程序的编译阶段是什么?

标准是否规定了 C++ 程序的编译阶段? 如果有,它们是什么? 如果不是,一个广泛使用的编译器的答案(我更喜欢 MSVS)会很棒. 我说的是预处理、标记化、解析等.它们的执行顺序是什么?它们具体做了什么? 编辑:我知道编译、链接和预处理做什么,我最感兴趣的是其他和顺序.当然,也欢迎对这些解释进行解释,因为我可能不是唯一对答案感兴趣的人. 解决方案 标准是否规定了 ..
发布时间:2022-01-17 08:20:16 C/C++开发

为什么是“使用命名空间标准"?被认为是不好的做法?

其他人告诉我,在代码中编写 using namespace std; 是错误的,我应该使用 std::cout 和 std::cin 直接代替. 为什么 using namespace std; 被认为是一种不好的做法?它是效率低下还是有声明不明确变量的风险(与 std 命名空间中的函数具有相同名称的变量)?它会影响性能吗? 解决方案 这与性能完全无关.但是考虑一下:您正在使用两个名 ..
发布时间:2022-01-14 22:45:13 C/C++开发

如何在 C++ 中将数字转换为字符串,反之亦然

因为这个问题每周都会被问到,所以这个FAQ可能会帮助很多用户. 如何在 C++ 中将整数转换为字符串 C++中如何将字符串转换为整数 如何在 C++ 中将浮点数转换为字符串 如何在 C++ 中将字符串转换为浮点数 解决方案 C++11更新 从 C++11 标准开始,字符串到数字的转换(反之亦然)已内置到标准库中.以下所有函数都存在于 中(根据 ..
发布时间:2022-01-12 23:31:28 C/C++开发

C++ 中的对象销毁

C++ 中的对象究竟是什么时候销毁的,这意味着什么?由于没有垃圾收集器,我是否必须手动销毁它们?异常如何发挥作用? (注意:这是 Stack Overflow 的 C++ 常见问题解答的一个条目.如果你想批评以这种形式提供一个常见问题解答,然后 开始发布在 meta 上所有这些都是这样做的地方.该问题的答案在 C++ 聊天室,FAQ 想法最初是从这里开始的,所以你的答案很可能会被提出这个想法 ..
发布时间:2022-01-08 11:42:06 C/C++开发

C++ 是否支持“最终"块?(我一直听到的这个“RAII"是什么?)

C++ 是否支持'finally'块? 什么是 RAII 习语? C++的RAII习语和C#的'有什么区别使用'语句? 解决方案 不,C++ 不支持“finally"块.原因是 C++ 支持 RAII:“Resource Acquisition Is Initialization"——一个真正有用的概念糟糕的名字†. 这个想法是对象的析构函数负责释放资源.当对象具有自动存 ..
发布时间:2022-01-08 11:34:22 C/C++开发

std::list::remove 方法是否调用每个已删除元素的析构函数?

我有代码: std::listlst;//....Node * node =/* 从我的节点上某处获取指针 */;lst.remove(节点); std::list::remove 方法是否调用每个移除元素的析构函数(和空闲内存)?如果是这样,我该如何避免? 解决方案 是的,从容器中移除 Foo* 会破坏 Foo*,但不会释放Foo.销毁一个原始指针总是没有操作.它不可能是任何其他方式 ..
发布时间:2022-01-07 11:01:39 C/C++开发

为什么使用 std::auto_ptr<> 是错误的?使用标准容器?

为什么在标准容器中使用 std::auto_ptr 是错误的? 解决方案 C++ 标准规定 STL 元素必须是“可复制构造的"和“可分配的".换句话说,一个元素必须能够被分配或复制,并且这两个元素在逻辑上是独立的.std::auto_ptr 不满足此要求. 以这段代码为例: class X{};std::vector>vecX;vecX.push_back(新X);std::a ..
发布时间:2022-01-07 10:48:35 C/C++开发

使用 nullptr 有什么好处?

这段代码概念上对三个指针做了同样的事情(安全指针初始化): int* p1 = nullptr;int* p2 = NULL;int* p3 = 0; 那么,分配指针 nullptr 与分配值 NULL 或 0 相比有什么优势? 解决方案 在那段代码中,似乎没有什么优势.但请考虑以下重载函数: void f(char const *ptr);void f(int v);f(NULL) ..
发布时间:2022-01-06 22:27:51 C/C++开发

C++程序的编译阶段有哪些?

C++ 程序的编译阶段是否由标准规定? 如果有,它们是什么? 如果没有,一个广泛使用的编译器的答案(我更喜欢 MSVS)会很棒. 我说的是预处理、标记化、解析等.它们的执行顺序是什么?它们具体做什么? 编辑:我知道编译、链接和预处理的作用,我最感兴趣的是其他和顺序.当然,也欢迎对这些进行解释,因为我可能不是唯一对答案感兴趣的人. 解决方案 C++ 程序的编译阶段 ..
发布时间:2022-01-04 21:24:10 C/C++开发

在 C++ 中正确使用堆栈和堆?

我已经编程了一段时间,但主要是 Java 和 C#.我从来没有真正需要自己管理内存.我最近开始用 C++ 编程,我对什么时候应该在堆栈上存储东西以及什么时候将它们存储在堆上有点困惑. 我的理解是,经常访问的变量应该放在栈和对象上,很少用到的变量,大数据结构都应该放在堆上.这是正确的还是我不正确? 解决方案 不,堆栈和堆之间的区别不在于性能.它的生命周期:函数内的任何局部变量(任何你没 ..
发布时间:2021-12-24 16:39:05 C/C++开发

shared_from_this 导致 bad_weak_ptr

我正在尝试在 asio 中保留已连接客户端的列表.我已经改编了文档中的聊天服务器示例 (http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/example/cpp03/chat/chat_server.cpp)这是我结束的重要部分与: #include #include #include #include ..
发布时间:2021-12-24 15:12:13 C/C++开发

basic_ios 上标志的语义

我发现自己一再被 rdstate() 标志弄糊涂了 - good()、bad()、eof()、fail() - 以及它们在 basic_ios::operator!、operator bool 和 operator void 中的表达方式*. 有人可以让我摆脱痛苦并解释这一点,这样我就不必再三思了吗? 解决方案 有三个标志指示错误状态: badbit 表示流出现了严重问题.这可 ..
发布时间:2021-12-21 17:32:45 C/C++开发

std::launder 的目的是什么?

P0137 介绍功能模板 std::launder 并在有关联合、生命周期和指针的部分对标准进行了很多很多更改. 这篇论文要解决的问题是什么?我必须注意语言的哪些变化?我们洗钱在做什么? 解决方案 std::launder 的命名恰如其分,但前提是您知道它的用途.它执行内存清洗. 考虑论文中的例子: struct X { const int n;};联合 U { X x;浮动 ..
发布时间:2021-12-21 09:48:45 C/C++开发

如何让 IOStream 性能更好?

大多数学习 C 的 C++ 用户更喜欢使用 printf/scanf 系列函数,即使他们在使用 C++ 编码. 虽然我承认我发现界面更好(尤其是类似 POSIX 的格式和本地化),但似乎压倒性的关注是性能. 看看这个问题: 如何加快逐行读取文件的速度 似乎最好的答案是使用 fscanf 并且 C++ ifstream 始终慢 2-3 倍. 我认为如果我们可以编译一个“ ..
发布时间:2021-12-20 15:44:16 C/C++开发

gcc/g++:“没有这样的文件或目录";

g++ 给了我以下形式的错误: foo.cc::: 致命错误: : 没有那个文件或目录编译终止. 用gcc编译C程序也是一样. 这是为什么? 请注意:这个问题以前被问过很多次,但每次都是针对提问者的情况.这个问题的目的是提出一个问题,其他人可以一劳永逸地将其复制为;一个常见问题. 解决方案 您的编译器刚刚尝试编译名为 foo.cc 的文件.在点击行号 line 后,编译器发 ..
发布时间:2021-12-18 22:51:20 C/C++开发