“fno-elide-constructors”在 GCC 中不起作用?

问题描述 投票:0回答:1

使用

-fno-elide-constructors
编译的这段代码应该打印“cctor”吗?

#include<iostream>

struct non_auto
{
  non_auto()=default;
private:
  non_auto(const non_auto&)
  {std::cout << "cctor" << std::endl;}
};

non_auto foo()
{
  return non_auto{};
}

int main()
{
  auto z = foo();
}

事实证明,对于我尝试过的所有 GCC 版本,它都没有打印任何内容,并且有效地省略了构造函数。

https://godbolt.org/z/rPTbzzza8

我错过了什么?即使使用此选项,是否仍可能发生省略?

更新:我正在使用C++17,似乎在C++14中可以工作,但它不是很有趣,因为我试图用这个标志在C++17中重现C++14的行为。

c++ gcc c++17 copy-elision dialect
1个回答
0
投票

查看 gcc 文档

在 C++17 中,编译器需要忽略这些临时变量,但此选项仍然会影响琐碎的成员函数。

我不知道成员函数需要多“微不足道”才会受到影响,但由于您是在非成员函数中创建对象,所以这个问题没有实际意义。当针对 C++17 或更高版本进行编译时,此标志基本上无效。

© www.soinside.com 2019 - 2024. All rights reserved.