c++-faq相关内容

私有、公共和受保护继承之间的区别

C++ 中的public、private 和protected 继承有什么区别? 我在 SO 上发现的所有问题都涉及特定案例. 解决方案 为了回答这个问题,我想先用我自己的话来描述成员的访问器.如果您已经知道这一点,请跳到标题“下一个:". 我知道有三种访问器:public、protected 和 private. 让: class Base {民众:int publi ..
发布时间:2021-12-01 14:54:59 C/C++开发

“好像"到底是什么?规则?

正如标题所说: 究竟什么是“as-if"?规则? 人们会得到的典型答案是: 允许任何和所有不改变程序可观察行为的代码转换的规则 有时,我们会不断从某些实现中获取行为,这归因于此规则.很多次都错了. 那么,这条规则到底是什么?标准中并没有明确将这条规则作为章节或段落提及,那么这条规则的范围究竟是什么? 对我来说,这似乎是一个标准没有详细定义的灰色区域.有人可以详细 ..
发布时间:2021-12-01 14:54:52 C/C++开发

C++中struct和class有什么区别?

这个问题是已经在 C#/.Net 的上下文中提出的. 现在我想了解 C++ 中结构和类之间的区别.请讨论技术差异以及在 OO 设计中选择其中一种的原因. 我将从一个明显的不同开始: 如果不指定public: 或private:,则结构的成员默认为public;类的成员默认是私有的. 我确信在 C++ 规范的晦涩角落中可以找到其他差异. 解决方案 您忘记了类和结构之间 ..
发布时间:2021-12-01 14:53:40 C/C++开发

什么是“参数相关查找"?(又名 ADL,或“Koenig Lookup")?

关于什么是参数依赖查找有什么好的解释?许多人也称它为 Koenig Lookup. 最好我想知道: 为什么这是一件好事? 为什么这是件坏事? 它是如何工作的? 解决方案 Koenig Lookup 或 Argument Dependent Lookup,描述了编译器如何在 C++ 中查找非限定名称. C++11 标准 § 3.4.2/1 规定: 当函数调用 (5 ..
发布时间:2021-12-01 14:48:04 C/C++开发

C++ 程序员应该知道哪些常见的未定义行为?

C++ 程序员应该知道哪些常见的未定义行为? 说,比如: a[i] = i++; 解决方案 指针 取消引用NULL 指针 取消引用由“new"返回的指针大小为零的分配 使用指向生命周期结束的对象的指针(例如,堆栈分配的对象或删除的对象) 取消引用尚未明确初始化的指针 执行指针运算,产生超出数组边界(上方或下方)的结果. 在数组末尾以外的位置取消引用指针. 转换指向不兼 ..
发布时间:2021-12-01 14:47:23 C/C++开发

如何将对象传递给 C++ 中的函数?

我是 C++ 编程的新手,但我有 Java 的经验.我需要有关如何在 C++ 中将对象传递给函数的指导. 我是否需要传递指针、引用或非指针和非引用值?我记得在 Java 中没有这样的问题,因为我们只传递保存对象引用的变量. 如果您还可以解释在何处使用这些选项,那就太好了. 解决方案 C++11 的经验法则: 按值传递,除非 你不需要对象的所有权,一个简单的别名就可以 ..
发布时间:2021-12-01 14:46:53 C/C++开发

类型名称后面的括号与 new 有区别吗?

如果'Test'是一个普通的类,有什么区别: Test* test = new Test; 和 Test* test = new Test(); 解决方案 让我们学究,因为有些差异实际上会影响您的代码行为.以下大部分内容摘自对“旧的新事物"文章的评论. 有时new运算符返回的内存会被初始化,有时则不会,取决于你新建的类型是否为POD(纯旧数据),或者它是包含 POD 成员并使用编译 ..
发布时间:2021-12-01 14:46:37 C/C++开发

为什么我必须通过 this 指针访问模板基类成员?

如果下面的类不是模板,我可以在 derived 类中简单地使用 x.但是,对于下面的代码,我必须使用this->x.为什么? template 类基{受保护:整数 x;};模板 派生类:公共基础{民众:int f() { return this->x;}};int main() {派生d;d.f();返回0;} 解决方案 简短回答:为了使 x 成为依赖名称,以便将查找推迟到模板参数已知. ..
发布时间:2021-12-01 14:44:46 C/C++开发

C++ 标准规定 int、long 类型的大小是多少?

我正在寻找有关基本 C++ 类型大小的详细信息.我知道这取决于架构(16 位、32 位、64 位)和编译器. 但是有 C++ 的标准吗? 我在 32 位架构上使用 Visual Studio 2008.这是我得到的: char : 1 字节短:2 个字节int : 4 字节长:4个字节浮点数:4 个字节双:8 字节 我试图找到可靠的信息,说明char、short、int、long、 ..
发布时间:2021-12-01 14:44:29 C/C++开发

什么是右值、左值、xvalues、glvalues 和 prvalues?

在 C++03 中,表达式是右值或左值. 在 C++11 中,表达式可以是: 右值 左值 xvalue glvalue 右值 两个类别变成了五个类别. 这些新的表达类别是什么? 这些新类别与现有的右值和左值类别有何关联? C++0x 中的右值和左值类别是否与 C++03 中的相同? 为什么需要这些新类别?WG21 众神只是想迷惑我们只是凡人吗? 解决方案 ..
发布时间:2021-12-01 14:43:49 C/C++开发

C++ 中的 POD 类型是什么?

我多次遇到过这个术语 POD 类型. 这是什么意思? 解决方案 POD 代表 Plain Old Data - 即一个类(无论是用关键字struct 或关键字 class) 没有构造函数、析构函数和虚成员函数.维基百科关于 POD 的文章 更详细地将其定义为: C++ 中的普通旧数据结构是一个聚合类,它只包含 PODS 作为成员,没有用户定义的析构函数,没有用户定义的复制赋值运算符 ..
发布时间:2021-12-01 14:43:09 C/C++开发

为什么 C++ 程序员应该尽量减少“new"的使用?

我偶然发现了堆栈溢出问题使用 std::list 时 std::string 的内存泄漏 和 其中一条评论是这样说的: 停止使用 new 这么多.我看不出你在任何地方使用 new 的任何理由你做到了.您可以在 C++ 中按值创建对象,它是使用该语言的巨大优势. 您不必分配堆上的一切. 不要像 Java 程序员那样思考. 我不太确定他的意思是什么. 为 ..
发布时间:2021-12-01 14:42:38 C/C++开发

const int*、const int * const 和 int const * 之间有什么区别?

我总是搞砸如何正确使用 const int*、const int * const 和 int const *.是否有一套规则来定义您可以做什么和不可以做什么? 我想知道在赋值、传递给函数等方面的所有注意事项. 解决方案 向后阅读(由 顺时针/螺旋法则): int* - 指向 int 的指针 int const * - 指向 const int 的指针 int * const ..
发布时间:2021-12-01 14:41:21 C/C++开发

我什么时候可以使用前向声明?

我正在寻找何时可以在另一个类的头文件中对一个类进行前向声明的定义: 我是否可以为基类、作为成员持有的类、通过引用传递给成员函数的类等执行此操作? 解决方案 把自己放在编译器的位置上:当你向前声明一个类型时,编译器只知道这个类型存在;它对自己的大小、成员或方法一无所知.这就是为什么它被称为不完整类型.因此,您不能使用该类型来声明成员或基类,因为编译器需要知道该类型的布局. 假设有 ..
发布时间:2021-12-01 14:41:13 C/C++开发

什么是 C++11 中的 lambda 表达式?

什么是 C++11 中的 lambda 表达式?我什么时候用一个?他们解决了哪些问题在引入之前是不可能的? 一些示例和用例会很有用. 解决方案 问题 C++ 包含有用的通用函数,例如 std::for_each 和 std::transform,它们非常方便.不幸的是,它们使用起来也很麻烦,特别是如果 functor 你想要apply 是特定函数所独有的. #include ..
发布时间:2021-12-01 14:40:23 C/C++开发

在哪里可以找到当前的 C 或 C++ 标准文档?

对于许多问题,答案似乎都在“标准"中.然而,我们从哪里找到呢?最好是在线的. 谷歌搜索有时会让人感到徒劳,尤其是对于 C 标准,因为它们淹没在编程论坛上的大量讨论中. 首先,因为这些是我现在正在搜索的,所以哪里有好的在线资源: C89 C99 C11 C++98 C++03 C++11 C++14 C++17 解决方案 PDF 版本标准 截至 2014 ..
发布时间:2021-12-01 14:40:16 C/C++开发