小编zya*_*ter的帖子

为什么我不能使用大括号括起初始化列表来调用复制构造函数?

我试图运行Bjarne Stroustrup编写的新C++编程语言书中的代码似乎不起作用.哪个编译器支持S y {x};代码中的语法?无法编译,我试过g ++,vc ++,还没有Clang,那个错误代码假设是一个初始化,之后,我把那个代码改成了S y = x;一个赋值,但是没有输出结果作为注释,我错了吗?

struct S {
     int* p;    // a pointer
};

S x {new int{0}};
void f()
{
     S y {x};              // "copy" x

     *y.p = 1;             // change y; affects x
     *x.p = 2;             // change x; affects y
     delete y.p;           // affects x and y
     y.p = new int{3};     // OK: change y; does not affect x
     *x.p = 4;             // oops: write to deallocated memory
} …
Run Code Online (Sandbox Code Playgroud)

c++11

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

Haskell中Integer的上界是什么?

我正在解决数学问题:想要得到数字的数字之和2^1000.

在Java中,解决方案如下:

String temp = BigInteger.ONE.shiftLeft(1000).toString();

int sum = 0;
for (int i = 0; i < temp.length(); i++)
    sum += temp.charAt(i) - '0';
Run Code Online (Sandbox Code Playgroud)

然后在Haskell中找到了一个解决方案,如下所示:

digitSum ::(Integral a) => a -> a                  
digitSum 0 = 0
digitSum n = (mod n 10) + (digitSum (div n 10))
Run Code Online (Sandbox Code Playgroud)

整个过程非常顺利,有一点似乎很有意思,我们知道整数类型无法处理2 ^ 1000,太大了,在Java中,很明显使用BigInteger和处理大数字到字符串,但在Haskell中,没有编译错误意味着2 ^ 1000可以传递在直接.这就是Haskell内部将数字转换为字符串的问题吗?我想确定类型是什么并让编译器确定,然后在GHCi中键入以下行:

Prelude> let i = 2 ^ 1000

Prelude> i 
107150860718626732094842504906000181056140481170553360744375038837035105112493612249319
837881569585812759467291755314682518714528569231404359845775746985748039345677748242309
854210746050623711418779541821530464749835819412673987675591655439460770629145711964776
86542167660429831652624386837205668069376

Prelude> :t i
i :: …
Run Code Online (Sandbox Code Playgroud)

math haskell

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

标签 统计

c++11 ×1

haskell ×1

math ×1