17得票1回答
“保证复制省略”(P0135,C++1z)是否可能导致ABI破坏?

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0135r0.html 上述“保证复制省略”提案已在2016年6月芬兰奥卢会议中被投票纳入C++工作文件,并被投票发布为委员会草案,希望这将导致它在明年以C++17标准的形式出版...

17得票2回答
C++17中非可复制变量的成员初始化

当对于不可复制的变量(例如 std::atomic<int>)进行成员初始化时,根据这里的答案,需要使用直接初始化而不是拷贝初始化。然而,当我在g++ 7.4.0中开启-std=c++17时,后者似乎也能正常工作。 #include <atomic> class A ...

17得票3回答
为什么使用std::make_pair从函数返回一个pair时,在使用结构化绑定时不会出现RVO?

考虑以下代码,定义了一个简单的结构体Test(带有默认构造函数和复制构造函数),并从函数中返回一个std::pair <Test,Test>。#include <iostream> #include <utility> using namespace st...

16得票2回答
构造函数初始化列表没有调用复制构造函数

我正在学习构造函数初始化列表,我编写了以下代码: class Mango { public: Mango(){cout<<"Mango::ctor()";} Mango(const Mango& other){cout<<"Mango::copy...

16得票6回答
C++返回值优化

这段代码:#include <vector> std::vector<float> getstdvec() { std::vector<float> v(4); v[0] = 1; v[1] = 2; v[2] = 3; ...

14得票1回答
clang的“range-loop-analysis”诊断是关于什么的?

背景: 考虑以下示例: #include <iostream> #include <vector> int main() { std::vector<bool> vectorBool{false, true}; for(const au...

14得票1回答
下面展示的片段中,移动构造函数为什么没有省略,有特殊的原因吗?

gcc、clang和VS2015在下面的代码中抛出对象a后不会省略对移动构造函数的调用。在我看来,满足了§8.12[class.copy]/31(N4140)的31.2条款中所建立的条件。#include <iostream> struct A { A() { std::...

14得票1回答
复制省略在列表初始化中的应用,在标准文档中有明确说明吗?

在[dcl.init]/17.6中,明确写道对于括号初始化的情况,会发生复制省略: 如果初始化表达式是prvalue,并且源类型的cv-unqualified版本与目标类相同,则使用初始化表达式来初始化目标对象。例如:T x = T(T(T()));调用T的默认构造函数来初始化x。 但是,...

13得票3回答
编译器能够省略以下复制吗?

我还是一名新手程序员,我知道过早优化不好,但我也知道大量复制东西也不好。 我已经了解了关于复制省略及其同义词的内容,但是例如维基百科上的例子让我感觉只有在要返回的对象同时被完全构造时才会进行复制省略。 那么对于像向量这样的对象呢?通常情况下,只有填充了一些内容后,它们才有意义,作为返回值使用时...

12得票1回答
C++17是否禁止了C++14中允许的拷贝省略情况?

请看下面的内容: struct X { X() {} X(X&&) { puts("move"); } }; X x = X(); 在C++14中,即使移动构造函数有副作用,也可以省略移动(或复制)操作,这得益于[class.copy]/31: 在以下...