相关疑难解决方法(0)

保证副本省略如何运作?

在2016年奥卢ISO C++标准会议上,标准委员会将一项名为" 保证副本省略"的提案通过简化的价值类别投票进入C++ 17.

保证副本省略如何运作?是否涵盖了某些已经允许复制省略的情况,或者是否需要更改代码来保证复制省略?

c++ copy-elision c++17

75
推荐指数
1
解决办法
7883
查看次数

非物质化的临时性是否需要可以访问析构函数?

GCC 7.2和Clang 5.0在这种情况下不一致:

struct A;

A foo();

struct A
  {
  static void bar()
     {
     foo();
     }
  private:
  ~A()=default;
  };

A foo()
  {
  return {};
  //GCC error: A::~A() is private in this context.
  };
Run Code Online (Sandbox Code Playgroud)

此行为是"c ++ 17保证(复制省略并且与RVO或NRVO无关)"的一部分.

GCC不会编译此代码,但Clang会这样做.哪一个错了?

也许这段话说机器人Clang和GCC符合标准[class.temporary]:

当类类型X的对象传递给函数或从函数返回时,如果X的每个复制构造函数,移动构造函数和析构函数都是微不足道的或删除的,并且X至少有一个未删除的复制或移动构造函数,则实现是允许创建一个临时对象来保存函数参数或结果对象.临时对象分别由函数参数或返回值构造,并且函数的参数或返回对象被初始化,就好像通过使用未删除的普通构造函数来复制临时对象(即使该构造函数不可访问或不会被选中)通过重载决策来执行对象的复制或移动).[注意:允许此纬度允许类类型的对象传递给寄存器中的函数或从寄存器中的函数返回. - 结束说明]

c++ temporary c++17

5
推荐指数
1
解决办法
212
查看次数

标签 统计

c++ ×2

c++17 ×2

copy-elision ×1

temporary ×1