C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C 0x中的“id”函数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
阅读 this关于从函数返回右值引用的答案让我思,如何在C 0x中编写id函数.

基本上,我希望id是一个什么都不做的函数,一个对程序没有可观察影响的函数.

我的第一次尝试如下:

#include <iostream>

class X
{
public:
  X(std::string&& s) : s(std::move(s)) {};
  X(const std::string& s) : s(s) {};
  std::string s;
  ~X() { std::cout << "Destroying: " << s << std::endl; }
private:
  X(const X&) {};
  X(X&&) {};
};

template <class T>
T&& id(T&& X) { return static_cast<T&&>(X); }

int main()
{
  auto&& x1 = X("x1");
  std::cout << "Line 1" << std::endl;
  auto&& x2 = id(X("x2"));
  std::cout << "Line 2" << std::endl;
}

但是,我担心在这种情况下,x2是悬空参,因为X(“x2”)在“第2行”执行之前被破坏.

所以在这里,很明显id具有可观察到的效果.

如何在C 0x中编写id函数,特别适用于没有移动/复制构造函数的类型.

@L_675_12@@H_801_16@
你不能.通常,您不应该编写返回rvalue引用的函数 – 正如您正确指出的那样,您不能将临时的生命周期延长到足够长的时间.

大佬总结

以上是大佬教程为你收集整理的C 0x中的“id”函数全部内容,希望文章能够帮你解决C 0x中的“id”函数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。