Questions tagged «c++11»

将此标记用于必须作为C ++ 11编译的代码(不使用C ++ 14或更高版本中引入的任何功能)。

7
在C ++中执行语句顺序
假设我有许多要按固定顺序执行的语句。我想在优化级别2中使用g ++,因此某些语句可以重新排序。一个人必须使用哪些工具来强制执行某种语句排序? 考虑以下示例。 using Clock = std::chrono::high_resolution_clock; auto t1 = Clock::now(); // Statement 1 foo(); // Statement 2 auto t2 = Clock::now(); // Statement 3 auto elapsedTime = t2 - t1; 在此示例中,以给定顺序执行语句1-3非常重要。但是,编译器是否不能认为语句2独立于1和3并按以下方式执行代码? using Clock=std::chrono::high_resolution_clock; foo(); // Statement 2 auto t1 = Clock::now(); // Statement 1 auto t2 = Clock::now(); // …

4
C ++模块-为什么将它们从C ++ 0x中删除?他们会稍后回来吗?
我刚刚发现了有关C ++ 0x中模块的旧C ++ 0x草案。 这个想法是通过只编写.cpp文件来摆脱当前的.h / .cpp系统,然后在编译过程中生成模块文件,然后再由其他.cpp文件使用。 这看起来像一个很棒的功能。 但是我的问题是:为什么他们从C ++ 0x中删除了它?是因为技术难题太多吗?时间不够?而且您认为他们会考虑针对C ++的新版本进行开发吗?

2
“……”标记的含义是什么?即参数包上的双省略号运算符
浏览gcc当前对新C ++ 11标头的实现时,我偶然发现了“ ......”标记。您可以[通过ideone.com] 检查以下代码是否可以正常编译。 template <typename T> struct X { /* ... */ }; template <typename T, typename ... U> struct X<T(U......)> // this line is the important one { /* ... */ }; 那么,该令牌的含义是什么? 编辑:看起来像这样将标题中的“ ......”修饰为“ ...”,我的意思是“ ......”。:)

5
std :: next_permutation实现说明
我很好奇如何std:next_permutation实现,所以我提取了gnu libstdc++ 4.7版本并清理了标识符和格式以产生以下演示... #include <vector> #include <iostream> #include <algorithm> using namespace std; template<typename It> bool next_permutation(It begin, It end) { if (begin == end) return false; It i = begin; ++i; if (i == end) return false; i = end; --i; while (true) { It j = i; --i; if …

5
如何正确传递参数?
我是C ++初学者,但不是编程初学者。我正在尝试学习C ++(c ++ 11),但对我来说最重要的事情还不清楚:传递参数。 我考虑了以下简单示例: 一个具有所有成员原始类型的类: CreditCard(std::string number, int expMonth, int expYear,int pin):number(number), expMonth(expMonth), expYear(expYear), pin(pin) 一个具有基本类型+ 1个复杂类型作为成员的类: Account(std::string number, float amount, CreditCard creditCard) : number(number), amount(amount), creditCard(creditCard) 一个具有基本类型+ 1个复杂类型集合的成员的类: Client(std::string firstName, std::string lastName, std::vector<Account> accounts):firstName(firstName), lastName(lastName), accounts(accounts) 创建帐户时,请执行以下操作: CreditCard cc("12345",2,2015,1001); Account acc("asdasd",345, cc); 显然,在这种情况下,信用卡将被复制两次。如果我将该构造函数重写为 Account(std::string number, float amount, …
108 c++  c++11 

3
std :: shared_ptr线程安全说明
我正在阅读http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html,但是对于我来说,一些线程安全性问题仍然不清楚: 标准保证引用计数是线程安全处理的,并且与平台无关,对吗? 相似的问题-标准保证只有一个线程(持有最后一个引用)会在共享库上调用delete,对吗? shared_ptr不能保证存储在其中的对象有任何线程安全吗? 编辑: 伪代码: // Thread I shared_ptr<A> a (new A (1)); // Thread II shared_ptr<A> b (a); // Thread III shared_ptr<A> c (a); // Thread IV shared_ptr<A> d (a); d.reset (new A (10)); 在线程IV中调用reset()会删除在第一个线程中创建的A类的先前实例,并将其替换为新实例吗?此外,在IV线程中调用reset()之后,其他线程将仅看到新创建的对象吗?
106 c++  c++11  shared-ptr 


2
constexpr暗示内联吗?
考虑以下内联函数: // Inline specifier version #include<iostream> #include<cstdlib> inline int f(const int x); inline int f(const int x) { return 2*x; } int main(int argc, char* argv[]) { return f(std::atoi(argv[1])); } 和constexpr等效版本: // Constexpr specifier version #include<iostream> #include<cstdlib> constexpr int f(const int x); constexpr int f(const int x) { return 2*x; …

8
如何检查C ++ 11支持?
有没有一种方法可以在编译时检测编译器是否支持C ++ 11的某些功能?例如,如下所示: #ifndef VARIADIC_TEMPLATES_SUPPORTED #error "Your compiler doesn't support variadic templates. :(" #else template <typename... DatatypeList> class Tuple { // ... } #endif
104 c++  c++11 

2
std :: move()如何将值转换为RValues?
我只是发现自己不完全了解的逻辑std::move()。 起初,我在Google上进行了搜索,但似乎只有有关如何使用的文档std::move(),而不是其结构的工作原理。 我的意思是,我知道模板成员函数是什么,但是当我查看std::move()VS2010中的定义时,它仍然令人困惑。 std :: move()的定义如下。 template<class _Ty> inline typename tr1::_Remove_reference<_Ty>::_Type&& move(_Ty&& _Arg) { // forward _Arg as movable return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg); } 我最奇怪的是参数(_Ty && _Arg),因为当我像下面看到的那样调用该函数时, // main() Object obj1; Object obj2 = std::move(obj1); 它基本上等于 // std::move() _Ty&& _Arg = Obj1; 但是,正如您已经知道的那样,您不能直接将LValue链接到RValue引用,这使我认为它应该是这样的。 _Ty&& _Arg = (Object&&)obj1; 但是,这很荒谬,因为std :: move()必须适用于所有值。 因此,我想充分理解它是如何工作的,我也应该看看这些结构。 …

3
C ++ 14是否在C ++中添加了新关键字?
C ++标准委员会倾向于回避向该语言添加新的关键字,但是对于C ++ 11而言并非如此。一些例子: constexpr decltype thread_local auto // New usage noexcept nullptr static_assert alignof alignas C ++ 14引入了新的关键字吗?
103 c++  c++11  keyword  c++14 

4
shared_ptr在哪里?
几个小时后试图找到shared_ptr的位置后,我现在感到非常沮丧。我看到的所有示例都没有显示完整的代码来包含shared_ptr(和正在运行的)标题。简单的声明std,tr1并<memory>在一切都没有帮助!我已经下载了增强功能,但仍然没有显示!有人可以告诉我在哪里可以找到我吗? 感谢您让我发泄挫败感! 编辑:我看到我的标题已更改。对于那个很抱歉。所以...这也是因为我不清楚shared_ptr是否“依赖C ++版本”->这就是为什么我没有声明我的环境->因此可能为什么我很难找到它。 我正在使用MSVS2008。 编辑2:我不知道为什么,但是当我到处寻找shared_ptr时,我包括了[memory]和[boost / tr1 / memory.hpp]和[boost / tr1 / tr1 / memory]。没错 感谢您的所有回复。

4
默认初始化std :: array?
使用C ++ 11 std::array,我是否可以保证语法std::array<T, N> x;将默认初始化数组的所有元素? 编辑:如果没有,是否有一种语法将对所有数组(包括零大小的数组)起作用,以将所有元素初始化为其默认值? 编辑:在cppreference上,默认的构造函数描述为: (constructor) (implicitly declared) (public member function) default-constructs or copy-constructs every element of the array 所以答案可能是肯定的。但我想根据标准或将来的标准确定这一点。

12
Visual Studio是否支持新的C / C ++标准?
我一直在阅读有关C99和C ++ 11以及所有这些非常甜美的东西,这些东西已经添加到语言标准中,有一天可能会很好用。但是,我们目前在用Visual Studio编写C ++的领域中感到苦恼。 该标准中的任何新内容是否都会添加到Visual Studio中,或者Microsoft是否对添加新的C#变体更感兴趣? 编辑:除了接受的答案,我发现了Visual C ++团队博客: http://blogs.msdn.com/vcblog/ 具体来说,其中的帖子: https://web.archive.org/web/20190109064523/https://blogs.msdn.microsoft.com/vcblog/2008/02/22/tr1-slide-decks/ 很有用。谢谢!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.