小编hel*_*ami的帖子

何时使用支架封闭的初始化器?

在C++ 11中,我们有了用于初始化类的新语法,它为我们提供了如何初始化变量的大量可能性.

{ // Example 1
  int b(1);
  int a{1};
  int c = 1;
  int d = {1};
}
{ // Example 2
  std::complex<double> b(3,4);
  std::complex<double> a{3,4};
  std::complex<double> c = {3,4};
  auto d = std::complex<double>(3,4);
  auto e = std::complex<double>{3,4};
}
{ // Example 3
  std::string a(3,'x');
  std::string b{3,'x'}; // oops
}
{ // Example 4
  std::function<int(int,int)> a(std::plus<int>());
  std::function<int(int,int)> b{std::plus<int>()};
}
{ // Example 5
  std::unique_ptr<int> a(new int(5));
  std::unique_ptr<int> b{new int(5)};
}
{ // Example 6
  std::locale::global(std::locale("")); // copied from 22.4.8.3 …
Run Code Online (Sandbox Code Playgroud)

c++ initializer-list c++11

91
推荐指数
3
解决办法
3万
查看次数

为什么numCapabilities是纯函数?

在并发库GHC.Conc中有一个名为的函数numCapabilities.它的类型是numCapabilities :: Int,它实际上返回一些你通过命令行标志传递的数字(例如,5如果选项是+RTS -N 5).

但是,getArgs(type IO [String]:)基本上相同(它返回未解析的非运行时参数)但不是纯函数.

如果唯一借口是numCapabilities往往需要在纯代码,以什么方式不其他命令行选项不能在纯代码需要?

我缺少什么或者是numCapabilities设计缺陷还是我允许写下面的怪物?

myGetArgs = unsafePerformIO getArgs
Run Code Online (Sandbox Code Playgroud)

haskell standard-library

21
推荐指数
2
解决办法
653
查看次数

从文件加载纯全局变量

我有一个包含一些数据的文件.这些数据永远不会改变,我想让它在IO monad之外可用.我怎样才能做到这一点?

示例(请注意,这只是一个示例,我的数据不可计算):

primes.txt:

2 3 5 7 13

code.hs:

primes :: [Int]
primes = map read . words . unsafePerformIO . readFile $ "primes.txt"
Run Code Online (Sandbox Code Playgroud)

这是"合法"使用unsafePerformIO吗?还有替代品吗?

haskell global-variables

12
推荐指数
2
解决办法
1163
查看次数

双倍的重要十进制数字?

什么C/C++ - 标准保证a的最小有效小数位double

C++标准实际上在§18.3.2.4/10的脚注中说,这相当于DBL_DIGC标准中的定义.但是我找不到关于C标准中最小值的任何信息.

那么,下列之一的最小值是多少?

  • std::numeric_limits<double>::digits10
  • DBL_MANT_DIG 编辑:不, DBL_DIG

c c++ floating-point language-lawyer

12
推荐指数
1
解决办法
692
查看次数

在编译时生成唯一的数字

我想为我的标题中的每个类生成唯一的数字,在我的案例中为素数,但是假设这应该只是连续的数字,即1,2,3,4等.

当然我可以硬编码:

struct A { enum { ID = 1; }; };
struct B { enum { ID = 2; }; };
struct C { enum { ID = 3; }; };
struct D { enum { ID = 4; }; };
Run Code Online (Sandbox Code Playgroud)

这非常容易出错,因为实际上类不是那么小,如果我在中间添加一个新类,如果我不想完全忽略ID的概述,我必须更改以下所有数字.

我希望我能做到以下几点:

struct A { enum { ID = get_next_int(); }; };
struct B { enum { ID = get_next_int(); }; };
struct C { enum { ID = get_next_int(); }; };
struct D { enum { ID …
Run Code Online (Sandbox Code Playgroud)

c++ metaprogramming side-effects compile-time c++11

8
推荐指数
1
解决办法
6463
查看次数

为什么标准中的iostream哨兵对象称为"cerberos"?

我想知道什么__cerb的意思libstdc++g++,我发现,这似乎是一个简短的名称cerberos作为官方C++标准文档命名.

§22.3.1/ 3:

[示例:iostream operator<<可能实现为:

template <class charT, class traits>
basic_ostream<charT,traits>&
operator<< (basic_ostream<charT,traits>& s, Date d) {
                                                            //      !!!!!!!!!!
  typename basic_ostream<charT,traits>::sentry cerberos(s); // <--- !! HERE !!
                                                            //      !!!!!!!!!!
  if (cerberos) {
    ios_base::iostate err = ios_base::iostate::goodbit;
    tm tmbuf; d.extract(tmbuf);
    use_facet<time_put<charT,ostreambuf_iterator<charT,traits> > >(
      s.getloc()).put(s, s, s.fill(), err, &tmbuf, ’x’);
    s.setstate(err);            // might throw
  }
  return s;
}
Run Code Online (Sandbox Code Playgroud)

- 结束例子]

为什么sentry调用iostream 对象cerberos,cerberos实际意味着什么?

c++ naming iostream naming-conventions

8
推荐指数
1
解决办法
259
查看次数

何时在null实例上调用成员函数会导致C++ 11中的未定义行为?

可能重复:
何时在null实例上调用成员函数会导致未定义的行为?

我只是用一个很好的答案来阅读这个问题:什么时候在null实例上调用成员函数会导致未定义的行为?

基本上,下面的代码是未定义的行为吗?

struct foo { static void bar() { } };
foo *p = nullptr;
p->bar();
Run Code Online (Sandbox Code Playgroud)

根据链接的帖子,这可以用不同的方式解释,一个是UB,一个不是.

在C++ 0x中,从n3126开始,模糊性仍然存在

这仍然适用于最终的C++ 11吗?

c++ null-pointer undefined-behavior language-lawyer c++11

3
推荐指数
1
解决办法
271
查看次数