C++没有对延迟评估的本机支持(如Haskell所做的那样).
我想知道是否有可能以合理的方式在C++中实现延迟评估.如果是的话,你会怎么做?
编辑:我喜欢Konrad Rudolph的回答.
我想知道是否可以以更通用的方式实现它,例如通过使用参数化类lazy,它基本上适用于矩阵矩阵的矩阵.
对T的任何操作都会返回惰性.唯一的问题是将参数和操作代码存储在惰性本身中.任何人都可以看到如何改善这一点?
我正在研究一个应该从命令行使用的项目,其语法如下:
program-name input-file
Run Code Online (Sandbox Code Playgroud)
该程序应该处理输入,计算一些东西并在stdout上吐出结果.
我选择的语言是C++,原因有几个,我不愿意辩论.计算阶段将是高度符号化的(思考编译器),并将使用非常复杂的动态分配数据结构.特别是,它不适合RAII风格的编程.
我想知道忘记释放内存是否可以接受,因为我希望整个计算消耗的内存少于可用内存,并且程序完成后OS可以在一步中自由回收所有内存(假设程序终止)很快).你有什么感受?
作为备份计划,如果我的项目需要作为服务器或交互式运行,我想我总是可以将垃圾收集器重新编译为源代码.有没有人有使用C++垃圾收集器的经验?他们运作得好吗?
我最近在向同事解释原因时感到尴尬
char a[100];
scanf("%s", &a); // notice a & in front of 'a'
Run Code Online (Sandbox Code Playgroud)
是非常糟糕的,稍微好一点的方法是:
char a[100];
scanf("%s", a); // notice no & in front of 'a'
Run Code Online (Sandbox Code Playgroud)
好.对于每个人都准备告诉我为什么不应该出于安全原因使用scanf:放松.这个问题实际上是关于"&a"与"a"的含义.
问题是,在我解释了为什么它不起作用之后,我们尝试了它(使用gcc)并且它起作用=)).我赶紧跑了
printf("%p %p", a, &a);
Run Code Online (Sandbox Code Playgroud)
它会打印两次相同的地址.
任何人都可以向我解释发生了什么事吗?