c++-faq相关内容

什么是“跨度"?我什么时候应该使用一个?

最近我收到了在我的代码中使用 span 的建议,或者在使用 span 的网站上看到了一些答案 -据说是某种容器.但是 - 我在 C++17 标准库中找不到类似的东西. 那么这个神秘的 span 是什么?为什么(或何时)使用它是非标准的好主意? 解决方案 是什么? A span 是: 对内存中某处 T 类型的连续值序列的非常轻量级的抽象. 基本上是一个 str ..
发布时间:2021-12-01 15:27:36 C/C++开发

什么是 T&&(双和号)在 C++11 中是什么意思?

我一直在研究 C++11 的一些新特性,我注意到一个是声明变量时的双 & 号,比如 T&&var. 首先,这只野兽叫什么?我希望谷歌允许我们搜索这样的标点符号. 它究竟是什么意思? 乍一看,它似乎是一个双引用(就像 C 风格的双指针 T** var),但我很难想到它的用例. 解决方案 它声明了一个 右值参考(标准提案文档). 这是对右值的介绍参考. 这是微软标 ..
发布时间:2021-12-01 15:26:01 C/C++开发

我什么时候使用哪种指针?

好的,所以上次我写 C++ 为生时,std::auto_ptr 是所有可用的 std lib,而 boost::shared_ptr 是所有可用的愤怒.我从未真正研究过 boost 提供的其他智能指针类型.我知道 C++11 现在提供了 boost 提出的一些类型,但不是全部. 那么有人有一个简单的算法来确定何时使用哪个智能指针吗?最好包括关于哑指针(像 T* 这样的原始指针)和其他 boo ..
发布时间:2021-12-01 15:25:38 C/C++开发

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

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

派生类中同名但签名不同的函数

我有一个同名的函数,但在基类和派生类中具有不同的签名.当我尝试在从派生类继承的另一个类中使用基类的函数时,我收到一个错误.看下面的代码: A 类{民众:void foo(string s){};};B类:公共A{民众:int foo(int i){};};C类:公共B{民众:空栏(){字符串 s;foo(s);}}; 我从 gcc 编译器收到以下错误: 在成员函数‘void C::bar() ..
发布时间:2021-12-01 15:23:56 C/C++开发

C++ 中 main 的正确声明是什么?

问题 main 函数在 C++ 中的正确签名是什么? 什么是正确的返回类型,从 main 返回一个值是什么意思? 允许的参数类型是什么,它们的含义是什么? 这是特定于系统的吗? 这些规则是否随着时间的推移而改变? 如果我违反了他们会怎样? 解决方案 main 函数必须在全局命名空间中声明为非成员函数.这意味着它不能是类的静态或非静态成员函数,也不能放在命 ..
发布时间:2021-12-01 15:10:26 C/C++开发

如何删除类似的 const 和非常量成员函数之间的代码重复?

假设我有以下 class X,我想在其中返回对内部成员的访问权限: Z 类{//细节};X级{std::vectorvecZ;民众:Z&Z(size_t 索引){//用于验证索引的大量代码Z&ret = vecZ[索引];//用于确定 Z 实例的更多代码//在索引处 * 恰好 * 是正确的 Z 类型(一个进程//这涉及计算闰年,其中//宗教节日在星期二//未来一千年左右)返回 ret;}cons ..
发布时间:2021-12-01 15:09:06 C/C++开发

什么是外联动和内联动?

我想了解外部链接和内部链接以及它们的区别. 我也想知道 const 变量默认在内部链接,除非另外声明为 extern. 解决方案 当您编写实现文件(.cpp、.cxx 等)时,您的编译器会生成一个翻译单元.这是来自您的实现的源文件以及您在其中 #include d 的所有标头. 内部链接是指翻译单元范围内的所有内容. 外部链接是指存在于特定翻译单元之外的事物.换句话 ..
发布时间:2021-12-01 15:08:46 C/C++开发

什么是“*this"的右值引用?

在 clang 的 C++11 状态页面中遇到了一个名为“*this 的右值引用"的提议.> 我已经阅读了很多关于右值引用的内容并理解了它们,但我认为我不知道这一点.我也无法使用这些术语在网络上找到太多资源. 页面上有提案文件的链接:N2439(将移动语义扩展到 *this),但我也没有从那里得到太多示例. 这个功能是关于什么的? 解决方案 首先,“ref-qualifier ..
发布时间:2021-12-01 15:08:00 C/C++开发

如何阻止 C++ 控制台应用程序立即退出?

最近,我一直在尝试从本网站学习 C++.不幸的是,每当我尝试运行其中一个代码示例时,我都会看到该程序打开了大约半秒钟,然后立即关闭.有没有办法让程序立即关闭,以便我可以看到我的努力成果? 解决方案 编辑: 正如 Charles Bailey 在下面的评论中正确指出的那样,如果 stdin,而且真的没有什么好的方法可以解决这个问题.如果您使用附加调试器运行,John Dibling 建议的解 ..
发布时间:2021-12-01 15:05:38 C/C++开发

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

以下短语在 C++ 中的含义是什么: 零初始化, 默认初始化,以及 值初始化 C++ 开发人员应该了解什么? 解决方案 需要意识到的一件事是“值初始化"是 C++ 2003 标准的新特性——它在 1998 年的原始标准中不存在(我认为它是可能是唯一不仅仅是澄清的区别).请参阅 KirillV. Lyadvinsky 对直接来自标准的定义的回答. 请参阅有关 o ..
发布时间:2021-12-01 15:05:12 C/C++开发

为什么 volatile 在多线程 C 或 C++ 编程中不被认为有用?

正如我最近发布的这个答案所示,我似乎对 volatile 在多线程编程上下文中的实用性(或缺乏)感到困惑. 我的理解是:任何时候一个变量可能在访问它的一段代码的控制流之外被改变,该变量应该被声明为volatile.信号处理程序、I/O 寄存器和被另一个线程修改的变量都构成了这种情况. 因此,如果您有一个全局 int foo,并且 foo 由一个线程读取并由另一个线程自动设置(可能使用适 ..
发布时间:2021-12-01 15:03:30 C/C++开发

指向类数据成员“::*"的指针

我遇到了这个奇怪的代码片段,它编译得很好: class Car{民众:国际速度;};int main(){int Car::*pSpeed = &Car::speed;返回0;} 为什么 C++ 有指向类的非静态数据成员的 this 指针?这个奇怪的指针在实际代码中有什么用? 解决方案 它是一个“指向成员的指针"——下面的代码说明了它的用法: #include 使用命名空间标准;类车 ..
发布时间:2021-12-01 15:02:48 C/C++开发

std::wstring VS std::string

我无法理解 std::string 和 std::wstring 之间的区别.我知道 wstring 支持宽字符,例如 Unicode 字符.我有以下问题: 我什么时候应该使用 std::wstring 而不是 std::string? std::string 能否保存整个 ASCII 字符集,包括特殊字符? 所有流行的 C++ 编译器都支持 std::wstring 吗? 什么是“宽 ..
发布时间:2021-12-01 15:00:54 C/C++开发

“STL"和“STL"有什么区别?和“C++ 标准库"?

有人带来了这篇文章 我注意到声称​​(我在意译) STL 术语被误用于指代整个 C++ 标准库,而不是取自 SGI STL 的部分. (...) 它指的是“STL",尽管事实上很少有人仍然使用 STL(它是在 SGI 设计的). C++ 标准库的部分内容基于 STL 的部分内容,正是这些部分被许多人(包括几位作者和臭名昭著的错误缠身的 cplusplus.com)称为“STL".然而, ..
发布时间:2021-12-01 14:58:07 C/C++开发

“const"最后在类的函数声明中的含义?

const 在这样的声明中是什么意思?const 让我很困惑. class foobar{民众:运算符 int() const;const char* foo() const;}; 解决方案 当您将 const 关键字添加到方法中时,this 指针实际上将变成一个指向 const 对象,因此您不能更改任何成员数据.(除非您使用 mutable,否则稍后会详细介绍). const 关键字 ..
发布时间:2021-12-01 14:57:28 C/C++开发

使用 std::forward 的主要目的是什么以及它解决了哪些问题?

在完美转发中,std::forward 用于将命名的右值引用 t1 和 t2 转换为未命名的右值引用.这样做的目的是什么?如果我们离开 t1 & 这将如何影响被调用的函数 innert2 作为左值? template 空外(T1&& t1, T2&& t2){内部(std::forward(t1),std::forward(t2));} 解决方案 你必须了解转发问题.您可以详细阅读整个问题, ..
发布时间:2021-12-01 14:57:19 C/C++开发

为什么我应该总是启用编译器警告?

我经常听到在编译 C 和 C++ 程序时我应该“始终启用编译器警告".为什么这是必要的?我怎么做? 有时我也听说我应该“将警告视为错误".我是不是该?我该怎么做? 解决方案 为什么要启用警告? C 和 C++ 编译器在报告一些常见的程序员错误默认方面是出了名的糟糕,例如: 忘记初始化变量 忘记从函数中返回一个值 printf 和 scanf 系列中的参数与格式字符串不 ..
发布时间:2021-12-01 14:56:18 C/C++开发