小编Bob*_*bby的帖子

将optional与reference_wrapper结合起来是否有意义?

在我看来,在C++中可以使用该类型std::optional<std::reference_wrapper<T>>.这种类型的对象本质上是对类型对象T或空值的引用,即几乎是一个指针.我的问题:

  1. 有没有之间的任何概念上的差异std::optional<std::reference_wrapper<T>>T*

  2. 有什么实际区别吗?是否有可能选择std::optional<std::reference_wrapper<T>>结束的情况T*

c++ pointers reference optional c++-standard-library

16
推荐指数
2
解决办法
1382
查看次数

Nullable可以在C#中用作函子吗?

请考虑C#中的以下代码.

public int Foo(int a)
{
    // ...
}

// in some other method

int? x = 0;

x = Foo(x);
Run Code Online (Sandbox Code Playgroud)

最后一行将返回一个cannot convert from 'int?' to 'int'足够公平的编译错误.但是,例如在Haskell中Maybe,有一个与NullableC#相对应.既然MaybeFunctor我将能够适用Foox使用fmap.C#有类似的机制吗?

c# haskell functional-programming nullable functor

14
推荐指数
3
解决办法
1039
查看次数

对象是否可以从标准C++容器中清除自身?

以下代码

#include <iostream>
#include <map>

struct foo
{
  void kill(std::map<int, foo>& m, int i)
  {
    m.erase(i);
  }
};

int main()
{
  std::map<int, foo> m;

  m.emplace(1, foo() );

  std::cout << m.size() << std::endl;

  m[1].kill(m, 1);

  std::cout << m.size() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在没有警告的情况下编译(g ++),执行时没有错误,并且通过输出判断kill方法foo从地图中删除对象.但是,我觉得这可能实际上是未定义的行为.似乎kill在行之后的行m.erase(i) this不再指向有效对象.

C++标准对此有何看法?

c++ containers undefined-behavior

11
推荐指数
1
解决办法
269
查看次数