在c ++ 11中,std :: tie允许隐式转换吗?
下面的代码编译并运行,但我不确定幕后发生了什么,或者这是否安全.
std::tuple<float,float> foo() { return std::make_tuple(0,0); }
double a, b;
std::tie(a,b) = foo(); // a and b are doubles but foo() returns floats
Run Code Online (Sandbox Code Playgroud) 这个简单的程序在编译时没有带ghc的标志时在常量内存空间中运行:
import Data.List
f x = x*x
g a = foldl' (+) (f a) [1..(1073741824-1)]
main = do putStrLn $ show $ foldl' (+) 0 $ map g [0,1]
Run Code Online (Sandbox Code Playgroud)
使用ghc -O2编译时,内存使用量超过系统资源(8GB).
将主要更改为:
main = do putStrLn $ show $ foldl' (+) 0 [g 0, g 1]
Run Code Online (Sandbox Code Playgroud)
缓解问题所以它似乎与地图有关.
任何人都可以解释这种行为,也许可以解决这个问题?
GHC版本是:格拉斯哥Haskell编译器,版本7.4.1,第2阶段由GHC版本7.4.1启动