c++11相关内容

C ++ volatile关键字是否引入了内存栅栏?

我理解 volatile 通知编译器该值可能会更改,但为了完成此功能,编译器是否需要引入内存栅栏工作? 从我的理解,对volatile对象的操作序列不能重新排序,必须保留。这似乎暗示一些记忆栅栏是必要的,并没有真正的方法围绕这一点。 这个相关问题 David Schwartz 回复 ...没有区别, C ++标准的观点, 在编译器做某事之间,编译器发出 指令,使硬件做某 ..
发布时间:2016-10-13 10:55:45 C/C++开发

使用libstdc ++编译库与clang ++ -stdlib = libc ++

我在Mac OS X(10.8.2)中使用C ++,我最近想出了使用C ++ 11功能的需要,这些功能可以通过clang ++编译器使用libc ++ stdlib。 然而,我还需要使用一些遗留的库编译和链接到libstdc ++(来自MacPorts)。 这样做时,我发现链接错误,因为使用例如 std :: string ,需要根据 std :: __ 1 :: basic_string ..
发布时间:2016-10-13 10:53:12 C/C++开发

新关键字“auto”;什么时候应该用它来声明一个变量类型?

可能重复: b $ b 我们(作为一个社群)有足够的经验来确定汽车何时和/或是否被滥用? 我是什么真正寻找 何时使用自动 避免 在80%的情况下可以快速遵循的简单的经验法则。 作为上下文,这个问题是由我的回应引发的这里 解决方案 我认为当类型在在您的项目中工作(或将工作)的程序员,则可以使用 auto ,例如以下代码: // good:auto这 ..
发布时间:2016-10-13 10:53:01 C/C++开发

std :: move()如何将值传输到RValues?

我发现自己没有完全理解 std :: move()的逻辑。 首先,我尝试了它,但似乎只有文档关于如何使用 std :: move() 我的意思是,我知道模板成员函数是什么,但是当我看到 std :: move )在VS2010中的定义,它仍然令人困惑。 std :: move()的定义如下。 模板 inline typename tr1 :: _ ..
发布时间:2016-10-13 10:52:27 C/C++开发

为什么`std :: move`命名为`std :: move`?

C ++ 11 std :: move(x)函数根本不移动任何东西。它只是一个转换为r值。为什么这样做? c> std :: move(x) code>只是一个转换为右值 - 更具体地说,是 xvalue ,而不是 prvalue 。还有一个事实,有一个名为 move 的演员有时会让人困惑。 move 可追溯至 2002年的原移动提案。本文首先介绍右值引用,然后说明如何编写更有效的 std ..
发布时间:2016-10-13 10:51:15 C/C++开发

C ++中的{0}是什么意思?

当 {0} 用于在C ++中初始化对象时,是什么意思?我在任何地方找不到对 {0} 的任何引用,并且因为大括号谷歌搜索没有帮助。 示例代码: SHELLEXECUTEINFO sexi = {0}; sexi.cbSize = sizeof(SHELLEXECUTEINFO); sexi.hwnd = NULL; sexi.fMask = SEE_MASK_NOCLOSE ..
发布时间:2016-10-13 10:50:43 C/C++开发

如何知道类枚举的底层类型?

我有一个变量声明为: 枚举类FooEnum:uint64_t {} ,我想转换为其基本类型,但我不想硬编码基本类型。例如,像这样: FooEnum myEnum; uint64_t * intPointer =(underlying_typeof(myEnum))& myEnum; 这是否可能? 方案 您可以使用: ..
发布时间:2016-10-13 10:45:19 C/C++开发

在C ++ 11中左移(<<)一个负整数未定义的行为?

是否向左移动一个否定 int 在C ++ 11中未定义的行为? 这里是从5.8: 2 / E1的值位为零填充。如果E1具有无符号类型, 结果的值为E1×2E2,比在结果类型中可表示的最大值 减1。否则,如果E1具有签名类型 和非负值,并且E1×2E2可以在结果 类型中表示,那么这是结果值; 令我困惑的部分是: $否则,如果E1具有有符号类型和非负值,并且E1×2E2 ..
发布时间:2016-10-13 10:41:50 C/C++开发