c++11相关内容

Lambda:为什么按值捕获的值是 const,而按引用捕获的值不是?

为什么按值捕获的值是 const,而按引用捕获的对象不是: int a;自动编译错误 = [=](){a = 1;}自动编译_ok = [&](){a = 1;} 对我来说这似乎不合逻辑,但它似乎是标准?尤其是对捕获的值进行不必要的修改可能是一个烦人的错误,但结果很可能仅限于 lambda 范围,而对通过引用捕获的对象进行不必要的修改通常会导致更严重的影响. 那么为什么不默认通过 con ..
发布时间:2022-01-23 23:59:38 C/C++开发

移动语义和返回常量值

我有将所有内容作为“const"值返回的习惯(?!?!?).像这样…… 结构体;s 常量 make_s();s const &s0 = make_s();s 常量 s1 = make_s(); 具有移动操作和右值引用以及以下功能... void take_s(s &&s0);void take_s(s const &&s0);//没有意义 我写不下去了…… take_s(make_s() ..
发布时间:2022-01-23 23:34:07 C/C++开发

我还应该在 C++11 中返回 const 对象吗?

可能重复: 我应该返回 const 对象吗? (该问题的原标题是:int foo() 还是 const int foo()? 解释了我为什么错过它.) Effective C++,第 3 条:尽可能使用 const.特别是,返回 const 对象被提升以避免像 if (a*b = c) { 这样的意外赋值.我觉得这有点偏执,但我一直遵循这个建议. 在我看来,返回 const 对象会 ..
发布时间:2022-01-23 23:23:22 C/C++开发

这里的 const 修饰符不是不必要的吗?

“Effective C++"第 3 条说“尽可能使用 const",并给出了如下示例: const Rational operator*(const Rational& lhs,const 理性&右); 为了防止客户犯下这样的暴行: 有理 a, b, c;...(a * b) = c;//在 a*b! 的结果上调用 operator= 但是函数的非引用返回值不是已经是右值了吗?那么为什么 ..
发布时间:2022-01-23 23:15:36 C/C++开发

C ++ 0x lambda按值捕获总是const?

有什么方法可以按值捕获,并使捕获的值非常量?我有一个库函子,我想捕获 &调用一个非 const 但应该是的方法. 以下内容无法编译,但将 foo::operator() const 修复. struct foo{bool 运算符 () ( const bool & a ){返回一个;}};int _tmain(int argc, _TCHAR* argv[]){富阿富;自动栏 = [=] ..
发布时间:2022-01-23 23:08:23 C/C++开发

常量&, &和&&C++ 中成员函数的说明符

最近我正在阅读 boost 的 API::optional 并遇到了以下问题: T const&运算符 *() const&;夯;运算符 *() &;T&&运算符 *() &&; 我还编写了自己的程序,将成员函数定义为 const&、&和&&(请注意,我不是在谈论返回类型,而是在分号之前的说明符)并且它们似乎工作正常. 我知道声明一个成员函数 const 是什么意思,但是谁能解释一下声明 ..
发布时间:2022-01-23 23:07:06 C/C++开发

const vs constexpr 变量

以下定义有区别吗? const double PI = 3.141592653589793;constexpr 双 PI = 3.141592653589793; 如果不是,C++11 中首选哪种风格? 解决方案 我相信是有区别的.让我们重命名它们,以便我们可以更轻松地讨论它们: const double PI1 = 3.141592653589793;constexpr 双 PI2 ..
发布时间:2022-01-23 23:04:07 C/C++开发

C++11 是否允许向量<const T>?

容器要求已从 C++03 更改为 C++11.虽然 C++03 有一揽子要求(例如,向量的复制可构造性和可分配性),但 C++11 对每个容器操作定义了细粒度的要求(第 23.2 节). 因此,您可以例如将可复制构造但不可赋值的类型 - 例如具有 const 成员的结构 - 存储在向量中,只要您只执行某些不需要赋值的操作(构造和 push_back 就是这样操作;insert 不是). ..
发布时间:2022-01-23 23:01:04 C/C++开发

如何在 C++ 中编码大型复杂的常量数据结构

过去,我使用 gcc 的 C99 风格的复合文字扩展C++ 在代码中编码嵌套的常量数据结构.这是一个例子: #include 使用命名空间标准;结构树{常量字符*名称;常量树*左;常量树*对;};常量树 *常量树 = (树 []) {"top",//名称(树[]) {“剩下",0,0},(树[]) {“对",0,0}};静态无效转储(常量树*树){如果(!树){cout 左) ..
发布时间:2022-01-23 21:13:42 C/C++开发

lambda 表达式的可变参数模板

使用 g++ 的正确方法是什么: 模板 空隙 g (F f);模板 解决方案 我想你也需要在捕获列表中展开pack a,像这样: 模板 无效 f (A ... a) {g ([&, a...] () { h (a...); });} 这是来自 C++0x 最终委员会草案,第 5.1.2.23 节的相关文本: 捕获后跟省略号是包扩展(14.5. ..
发布时间:2022-01-23 21:13:16 C/C++开发

为什么这个专门的char_traits<uint8_t>和编解码器<uint8_t>与 basic_ifstream 模板一起使用 throw std::bad_cast?

那里 有 已经 问题 在 Stackoverflow 上询问 为什么 basic_fstream 不起作用.答案说 char_traits 仅专门用于 char 和 wchar_t (加上 char16_t、char32_t 在 C++11 中),您应该坚持使用 basic_fstream 来读取二进制数据并在需要时进行转换. 该死的,这还不够好!:) 没 ..
发布时间:2022-01-23 21:05:08 C/C++开发

在 Visual Studio Code 中编译 C++11

我正在使用 Visual Studio Code 编译 C++ 程序,它适用于大多数 C++ 程序,因为它使用 g++ 命令进行编译.但是,我在使用它编译 c++11 程序时遇到了困难. 当我尝试编译 C++11 程序时,编译器命令 g++ 会尝试使用默认的 C++98 标准对其进行编译,这会导致错误. 我知道使用 g++ -std=c++11,我们可以使用 g++ 编译 C++11 ..
发布时间:2022-01-23 21:02:14 C/C++开发

C++ 中的抽象语法树表示

我已经有了创建标记列表的标记器接口.我有解析器的工作机制.它真的很独特,就像一个魅力.我唯一想念的是 AST 的基本结构.树、节点和语句应如何在抽象级别表示.我不需要任何实现,只需快速了解它在类层次结构中的外观如何?我正在研究一种面向对象的语言.是的,我已经意识到我需要两种类型的陈述.一些返回值的“表达式"类型语句和一个不返回的指令流控制类型语句.非常感谢. 解决方案 如果你的语言是命令式 ..
发布时间:2022-01-23 21:00:46 C/C++开发