Questions tagged «c++11»

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



8
将捕获lambda作为函数指针传递
是否可以将lambda函数作为函数指针传递?如果是这样,我肯定做错了什么,因为我遇到了编译错误。 考虑以下示例 using DecisionFn = bool(*)(); class Decide { public: Decide(DecisionFn dec) : _dec{dec} {} private: DecisionFn _dec; }; int main() { int x = 5; Decide greaterThanThree{ [x](){ return x > 3; } }; return 0; } 当我尝试对此进行编译时,出现以下编译错误: In function 'int main()': 17:31: error: the value of 'x' is …

2
现代C ++可以免费为您提供性能吗?
有时有人声称C ++ 11/14可以提高性能,即使仅编译C ++ 98代码也可以。理由通常是根据移动语义的,因为在某些情况下,右值构造函数是自动生成的,或者现在是STL的一部分。现在,我想知道以前是否已经通过RVO或类似的编译器优化处理了这些情况。 然后我的问题是,是否可以给我一个C ++ 98代码的实际示例,该示例无需修改即可使用支持新语言功能的编译器更快地运行。我确实理解不需要标准兼容的编译器来执行复制省略,仅由于这个原因,移动语义可能会带来速度,但是如果您愿意,我希望看到一种病态较少的情况。 编辑:为了清楚起见,我不是在问新的编译器是否比旧的编译器快,而是如果有代码将-std = c ++ 14添加到我的编译器标志中,它将运行得更快(避免复制,但是如果您除了移动语义之外,还可以提出其他建议,我也很感兴趣)

7
为什么在C ++ 11中使用非成员的begin和end函数?
每个标准容器都有一个beginand end方法,用于返回该容器的迭代器。但是,C ++ 11显然引入了称为std::begin和的自由函数,std::end它们调用begin和end成员函数。所以,不用写 auto i = v.begin(); auto e = v.end(); 你会写 auto i = std::begin(v); auto e = std::end(v); Herb Sutter 在他的写现代C ++的演讲中说,当您想要容器的开始或结束迭代器时,应该始终使用自由函数。但是,他没有详细说明您为什么要这么做。查看代码,可以节省一个字符。因此,就标准容器而言,自由功能似乎完全没有用。赫伯·萨特(Herb Sutter)表示,使用非标准容器也有好处,但是他没有详细介绍。 那么,问题到底是什么做的免费功能的版本std::begin,并std::end做超出调用它们相应的成员函数的版本,你为什么要使用它们?

3
未定义对'std :: cout'的引用
这是示例吗? #include <iostream> using namespace std; int main() { cout << "Hola, moondo.\n"; } 它引发错误: gcc -c main.cpp gcc -o edit main.o main.o: In function `main': main.cpp:(.text+0xa): undefined reference to `std::cout' main.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char,std::char_traits<char> >& std::operator<< <std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char> >&, char const*)' main.o: In function `__static_initialization_and_destruction_0(int,int)': main.cpp:(.text+0x3d): undefined reference …
193 c++  c++11  gcc  cout 

9
C ++ 11中弃用了哪些C ++习惯用法?
有了新标准,就有了新的做事方法,许多方法都比旧方法好,但是旧方法仍然可以。显然,出于向后兼容的原因,新标准并未正式弃用。因此,剩下的问题是: 哪种旧的编码方式绝对不如C ++ 11风格,我们现在可以做什么? 在回答这个问题时,您可以跳过一些明显的事情,例如“使用自动变量”。
192 c++  c++11  c++-faq 


2
函数中的静态constexpr变量有意义吗?
如果我在函数中有一个变量(例如,一个大数组),则将其声明为static和constexpr是否有意义?constexpr保证数组是在编译时创建的,那static会没用吗? void f() { static constexpr int x [] = { // a few thousand elements }; // do something with the array } static根据生成的代码或语义,实际上在做什么?
192 c++  static  c++11  constexpr 

2
哪些Boost功能与C ++ 11重叠?
几年前,我把我的C ++技能放在架子上,现在看来,当我再次需要它们时,情况发生了变化。 现在我们有了C ++ 11,我的理解是它与许多Boost功能重叠。 是否存在一些重叠之处的摘要,哪些Boost库将成为传统,推荐使用哪些C ++ 11功能而不是boost功能,以及哪些更好?
191 c++  boost  c++11 

5
什么是不归路?
[dcl.attr.noreturn]提供以下示例: [[ noreturn ]] void f() { throw "error"; // OK } 但我不明白这是什么意思[[noreturn]],因为该函数的返回类型已经存在void。 那么,该noreturn属性的意义是什么?应该如何使用?


16
如何在仅具有受保护或私有构造函数的类上调用:: std :: make_shared?
我的这段代码行不通,但我认为目的很明确: testmakeshared.cpp #include <memory> class A { public: static ::std::shared_ptr<A> create() { return ::std::make_shared<A>(); } protected: A() {} A(const A &) = delete; const A &operator =(const A &) = delete; }; ::std::shared_ptr<A> foo() { return A::create(); } 但是在编译时会出现此错误: g++ -std=c++0x -march=native -mtune=native -O3 -Wall testmakeshared.cpp In file included from …
187 c++  c++11  shared-ptr 

4
std :: auto_ptr到std :: unique_ptr
随着新标准的到来(以及某些编译器中已有的部件),新类型std::unique_ptr应被替换为std::auto_ptr。 它们的用法是否完全重叠(因此我可以在我的代码上进行全局查找/替换(不是我可以这样做,但是如果可以的话))还是应该注意阅读文档后看不到的一些区别? 另外,如果它是直接替代品,为什么给它起一个新的名字而不是仅仅改善它std::auto_ptr?


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.