小编Bar*_*icz的帖子

有没有使用std :: cin来初始化const变量的技巧?

常见的std :: cin用法

int X;
cin >> X;
Run Code Online (Sandbox Code Playgroud)

这样做的主要缺点是X不能const.它很容易引入错误; 我正在寻找一些技巧来创建一个const值,并只写一次.

天真的解决方案

// Naive
int X_temp;
cin >> X_temp;
const int X = X_temp;
Run Code Online (Sandbox Code Playgroud)

你可以通过改变X来明显改善它const&; 仍然可以修改原始变量.

我正在寻找一个如何做到这一点的简短而聪明的解决方案.我相信我不是唯一一个能从这个问题的答案中获益的人.

//编辑:我希望解决方案可以轻松扩展到其他类型(比方说,所有POD,std::string以及带有普通构造函数的可移动可复制类)(如果没有意义,请在评论中告诉我) .

c++ iostream c++11

43
推荐指数
5
解决办法
1万
查看次数

困惑于Haskell的布局工具如何处理此代码

浏览https://wiki.haskell.org/IO_inside时,我遇到了以下评论和代码......

"而且,Haskell布局规则允许我们使用以下布局:

main = do a <- readLn
          if (a>=0) then return ()
            else do
          print "a is negative"
          ...
Run Code Online (Sandbox Code Playgroud)

这可能有助于逃避冗长的"做"声明."

此后,我将使用符号C*来指代上述代码.

我认为C*的意图是读取一个数字,然后:
(i)如果它是非负的,则什么都不做.
(ii)如果是负数,则显示输出,表明它是.

我最初的反应是认为C*要么不能正确解析,要么不会按预期运行.

我认为布局会在第二个'do'之后立即插入一组空括号和一个分号,因为lexeme'print'的缩进比'a <中'a'所建立的当前布局上下文的缩进级别更多. - readLn".

也就是说,我对Layout生成的布局不敏感代码(以下称为C')的预测将类似于:

main = do {
          a <- readLn;
          if (a>=0) then return ()
            else do {};
          print "a is negative"
          ...
          }
Run Code Online (Sandbox Code Playgroud)

我认为情况就是这样,基于Haskell 2010语言报告(https://www.haskell.org/onlinereport)第1部分第2.7节("词汇结构":'布局')中包含的以下句子./haskell2010/haskellpa1.html):

"如果紧跟在where,let,do或of之后的非括号lexeme的缩进小于或等于当前缩进级别,则插入空列表"{}"而不是开始布局,并且布局对当前级别进行处理(即插入分号或近括号)."

有关布局规则的更详细说明,请参见Haskell 2010语言报告第1部分(上面给出的URL)的第10.3节("语法参考":'布局').

在阅读这个更详细的说明时,我感到放心,我对Layout(即C')生成的布局不敏感代码的预测是正确的.

然而,令我惊讶的是,当我在GHCi中尝试上面规定的原始代码(即C*)时,它起作用(正确解析并按预期运行).

问题......

  1. 上面引用的句子(来自第2.7节)是否准确?

  2. 上面提到的布局规则(来自第10.3节)的详细说明是否准确?

  3. 我使用的推理中的缺陷是什么来达到我对由原始代码C*的Layout生成的布局不敏感代码(即C')的预测?

  4. 布局为上面规定的原始代码(即C*)生成的布局不敏感代码是什么,以及解释它的规则/原则是什么?

  5. 一般来说,有没有办法可以查看Layout生成的布局不敏感代码?如果是这样,它是什么(请详细说明/解释适合Haskell新手的技术,像我一样)?

layout haskell rules

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

如何将更改日志添加到Cabal包中?

我看到Hackage 2有一个changelog字段.这是我长期以来想要的功能.但是,多次谷歌搜索未能找到关于如何填充此字段的单一文档.有谁知道怎么做?

haskell cabal hackage

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

如何在纯函数中选择一个随机列表元素?

我想创建一个Haskell函数,可以从给定列表中选择一个随机数.我的签名是:

randomPick :: [a] -> a 
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

haskell

21
推荐指数
3
解决办法
7502
查看次数

std :: cout是缓冲的吗?

只是阅读"斯科特迈耶斯"的一篇古老但有趣的文章

http://aristeia.com/Papers/C++ReportColumns/novdec95.pdf

基本上它是关于宁愿使用'\n'std::endl(我同意,并使用相同的扩充年).

但是最后一部分表明这不包含在他的书中,因为整个事情由于两点而变得没有实际意义:

  1. std::cout 没有缓冲.
  2. ios::unitbuf未明确定义on std :: cout 的状态(因此依赖于实现).

我做了一个快速查看,但找不到明确的标准参考1是真的.是否std::cout与我一直以来的理解相反?

c++ cout

20
推荐指数
3
解决办法
6355
查看次数

是否存在"int"会导致struct padding的环境?

具体来说,这是一个讨论:

内存消耗明智,是否有可能使用struct两个ints占用更多内存而不仅仅是两个ints?

或者,用语言来说:

#include <iostream>

struct S { int a, b; };

int main() {
    std::cout << (sizeof(S) > sizeof(int) * 2 ? "bigger" : "the same") << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

是否有任何合理的1(不一定是普通或当前)环境,这个小程序会打印出来bigger

1为了澄清,我在这里所指的是以一些有意义的数量开发和生产的系统(和编译器),特别是不是为了证明这一点而构建的理论示例,或一次性原型或业余爱好者创作.

c++ memory int alignment

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

为什么我们需要嵌入式设备中的引导加载程序?

我在ARM cortex-A8上使用ELinux内核.

我知道引导加载程序的工作原理以及它正在做什么工作.但我有一个问题 - 为什么我们需要bootloader,为什么bootloader诞生了

为什么我们不能在没有bootloader的情况下直接从闪存中将内核加载到RAM中?如果我们加载它会发生什么?事实上,处理器不会支持它,但为什么我们遵循这个程序呢?

linux embedded arm bootloader

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

如何安全地从流中读取unsigned int?

在以下程序中

#include <iostream>
#include <sstream>

int main()
{
    std::istringstream iss("-89");
    std::cout << static_cast<bool>(iss) << iss.good() << iss.fail() << iss.bad() << iss.eof() << '\n';
    unsigned int u;
    iss >> u;
    std::cout << static_cast<bool>(iss) << iss.good() << iss.fail() << iss.bad() << iss.eof() << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

流lib将一个有符号的值读入一个unsigned int甚至没有打嗝的情况下,默默地产生错误的结果:

11000
10001
Run Code Online (Sandbox Code Playgroud)

我们需要能够捕获那些运行时类型不匹配错误.如果我们还没有在模拟中发现这一点,这可能会炸毁非常昂贵的硬件.

我们如何安全地从流中读取无符号值?

c++ iostream

17
推荐指数
3
解决办法
1936
查看次数

如何将当前工作移至主题分支?

我开始在主分支中执行一个简单的任务.你知道任务的类型"这太简单了,甚至打扰了git分支"......不可避免的结果是,现在我在主分支中有很多未完成的工作,需要处理其他事情.如何将当前工作移至新分支?

git

15
推荐指数
2
解决办法
791
查看次数

makeLenses和makeFields之间有什么区别?

非常不言自明.我知道makeClassy应该创建类型类,但我发现两者之间没有区别.

PS.用于解释两者默认行为的加分点.

haskell haskell-lens

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

标签 统计

c++ ×4

haskell ×4

iostream ×2

alignment ×1

arm ×1

bootloader ×1

c++11 ×1

cabal ×1

cout ×1

embedded ×1

git ×1

hackage ×1

haskell-lens ×1

int ×1

layout ×1

linux ×1

memory ×1

rules ×1