小编Leu*_*nko的帖子

有没有办法在PC中将auto作为参数传递?

有没有办法将auto作为参数传递给另一个函数?

int function(auto data)
{
    //DOES something
}
Run Code Online (Sandbox Code Playgroud)

c++ arguments function auto

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

带有Emacs或VIM的Colemak键盘

我一直在TODO清单上把事情搞定了.我最近选择了Colemak.接下来我想学习Vim或Emacs.我倾向于Vim,但其中一个好处是坚持主页排.在Colemak的帮助下,主排已经改变.我意识到我可以重新映射键,但是将功能分配给不同的字母对我来说并不是非常有吸引力(如果字母和它们的功能之间有任何关系.我知道运动不相关但我不确定所有其余的.)

我不想发表关于文本编辑器的议论文章,而是接收Colemak(或Dvorak)用户关于替代键映射和这两个编辑器的评论.

谢谢

keyboard colemak editor keymapping

26
推荐指数
4
解决办法
9119
查看次数

功能模板重载

任何人都可以总结一下函数模板重载的想法吗?重要的是,模板参数或功能参数?返回值怎么样?

例如,给定一个功能模板

template<typename X, typename Y> void func(X x, Y y) {}
Run Code Online (Sandbox Code Playgroud)

什么是重载的功能模板?

1) template<typename X> void func(X x, int y) {}
2) template<typename X, typename Y> X func(X x, Y y) {}
3) template<class X, class Y, class Z> void func(X x, Y y, Z z) {}
Run Code Online (Sandbox Code Playgroud)

c++ templates overloading

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

Windows密钥可以映射到Vim吗?

使用Windows键作为Meta在Emacs中非常有用,有没有办法在Vim中执行此操作?

vim keyboard-shortcuts editor keymapping

15
推荐指数
5
解决办法
8913
查看次数

基于术语重写的评估如何运作?

Pure编程语言显然基于术语重写,而不是传统上类似外观语言的lambda演算.

......这会产生什么质的,实际的差异?其实,什么的,因为它计算表达式的方式有什么区别?

所链接的页面提供了很多项重写的例子是有用的,但它实际上并没有描述什么是从功能应用确实有所不同,除了因为它出现在Haskell和ML是好的,它有相当灵活的模式匹配(和模式匹配,但不是评估策略的基础).值与定义的左侧匹配并替换为右侧 - 这不仅仅是β减少吗?

模式的匹配和输出表达的替换,表面看起来有点像syntax-rules我(甚至是卑微的#define),但其主要特征显然是它发生在之前而不是评估期间,而Pure是完全动态的,有在其评价体系没有明显的相分离(实际上否则Lisp的宏系统一直由他们如何是一个很大的噪音不是从功能应用的不同).能够操纵符号表达式值很酷,但也看起来像动态类型系统的工件,而不是评估策略的核心(非常确定你可以重载Scheme中的运算符来处理符号值;事实上你甚至可以使用表达式模板在C++中完成它.

那么术语重写(由Pure使用)和传统功能应用程序之间的机械/操作差异是什么,作为评估的基础模型,当两者都发生替换时?

evaluation functional-programming rewriting

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

运行多个docker撰写

我正在使用在3个不同的码头工人上运行的应用程序:

  • 第一个是使用REST API调用的服务器HTTP
  • 第二个是rabbitmq
  • 第三个是工人

整个应用程序启动 docker-compose up

真的很简单:)

我想使它可扩展并独立于其他应用程序运行整个应用程序的多个实例(3个docker镜像),然后放置一个负载均衡器haproxy,将重定向到其中一个应用程序.

我看到我可以使用,docker-compose up --scale blablabla但问题是我可以扩展容器,但我真的想保持不同的"应用程序"独立.

例如,如果我想要3个版本的应用程序,我将有9个泊坞窗图像等.

我看到我们可以在docker中运行docker --privilege(允许我在里面创建一个带有3个docker的docker)但是我在Stack Overflow上读到它不是一个合适的解决方案.

你有解决方案吗?或至少阅读一些文件.

我听说Kubernetes可能是一个解决方案,但我不确定.我看了(在堆栈上)

如果您需要紧密绑定多个容器,您可能需要查看在其"pods"中运行docker的Kubernetes

docker kubernetes docker-compose

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

根据标准,C中的指针标记是否未定义?

一些动态类型语言使用指针标记作为识别或缩小所表示值的运行时类型的快速方法.执行此操作的经典方法是将指针转换为适当大小的整数,并在最低有效位上添加标记值,对于对齐的对象,这些位被假定为零.当需要访问对象时,标记位被屏蔽掉,整数转换为指针,指针被正常解除引用.

这本身就是有序的,除了它都取决于一个巨大的假设:对齐的指针将转换为保证在正确位置具有零位的整数.

是否可以根据标准的字母保证这一点?


虽然标准的6.3.2.3节(参考C11草案)说从指针到整数的转换结果是实现定义的,但我想知道的是6.5.2.1和6.5.6中的指针算术规则是否有效约束指针 - >整数转换的结果遵循许多程序已经假设的相同的可预测算术规则.(6.3.2.3注释67似乎表明这是标准的预期精神,而不是那意味着很多.)

我特别想到的情况是,人们可能会分配一个大型数组作为动态语言的堆,因此我们所讨论的指针是这个数组的元素.我假设C分配数组本身的开始可以通过一些辅助手段放置在对齐位置(尽管如此也是这样讨论).假设我们有一个八字节"cons cell"数组; 我们可以保证指向任何给定单元格的指针将转换为标记最低三位的整数吗?

例如:

typedef Cell ...; // such that sizeof(Cell) == 8
Cell heap[1024];  // such that ((uintptr_t)&heap[0]) & 7 == 0

((char *)&heap[11]) - ((char *)&heap[10]); // == 8
(Cell *)(((char *)&heap[10]) + 8);         // == &heap[11]
&(&heap[10])[0];                           // == &heap[10]
0[heap];                                   // == heap[0]

// So...
&((char *)0)[(uintptr_t)&heap[10]];        // == &heap[10] ?
&((char *)0)[(uintptr_t)&heap[10] + 8];    // == &heap[11] ?

// ...implies?
(Cell *)((uintptr_t)&heap[10] + …
Run Code Online (Sandbox Code Playgroud)

c standards-compliance language-lawyer

11
推荐指数
2
解决办法
907
查看次数

这种指针标记方法是否符合C标准?

(回顾指针标记:对象的大小意味着其指针中的有限位数将始终未使用,并且可以重新用于其他用途,例如标记对象的类型.)

对我之前关于这个主题的问题的一个很好的答案证实,将指针转换为整数和对整数进行处理的天真方法在技术上无法依赖于工作(无视其在实践中的受欢迎程度).

再考虑一下,我想我有一个适用于原始问题中描述的特定情况的解决方案(所有对象都是相同的大小,所有对象都是从一个"堆"数组中分配的).有人可以证实我的推理吗?

// given:
typedef Cell ...; // such that sizeof(Cell) == 8
Cell heap[1024];  // or dynamic, w/e

// then:
void * tagged = ((char *)&heap[42]) + 3;  // pointer with tag 3 (w/e that means)

int tag = ((char *)tagged - (char *)heap) % sizeof(Cell);  // 3
Cell * ptr = (Cell *)((char *)tagged - tag);               // &heap[42]
Run Code Online (Sandbox Code Playgroud)

用语言:没有关于指针的整数表示的假设.通过索引指向对象内的字节来应用标记.(这当然是允许的.)

指针减法返回同一数组中两个对象的索引差异.对象中的字节地址应该是连续的,因此通过获取所寻址字节的索引并从该索引中删除所有前面单元格的大小,将标记值转换为标记; 通过删除现在已知的索引偏移量,可以将标记指针恢复为Cell指针.

这是否符合标准,因此是一种便携式指针标记方法?如果将数组的类型转换为其他内容,仍然允许指针减法工作,在这种情况下是char吗?我可以用sizeof(Cell)这种方式吗?

(不,我不知道为什么这种技术性在我脑海中浮现如此;是的,可移植性很容易通过其他方式实现.)

c standards-compliance

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

索引字符串文字是初始化常量表达式吗?

以下代码尝试在两个不同的常量上下文中对字符串文字使用数组索引:

static char x = "abcx"[3];

_Static_assert ("abcx"[3] == 'x', "...");
Run Code Online (Sandbox Code Playgroud)

根据Compiler Explorer的判断,工具供应商之间存在明确的共识,即不允许在第二种情况下执行此操作,因为第二种情况明确要求使用整数常量表达式。但是,它们似乎在第一个上下文方面有所不同,第一个上下文只是初始化程序中使用的算术常数表达式。GCC和Clang是允许这样做的实现而脱颖而出。

就其本身而言,这并不有趣,因为在6.6的第10段中,C11 / C18确实表示“实现可以接受其他形式的常量表达式”。但是,在这种情况下脱颖而出是因为:

  • GCC和Clang都默默地接受了这一点-pedantic(是的,编译器签发并不意味着代码符合要求)。构建代码很有意义,因为它的含义很简单,但是如果他们认为这不符合要求,我会期望发出警告,并且他们可以识别(他们认为)它是否符合要求,因为...

  • 对于这两个编译器,行为最近都发生了变化 -Clang一直在此之前引发错误,直到3.8,而GCC之前一直在引发错误直到8.0。这些版本分别于2016年和2018年发布。这表明更改是有意的,但我还没有找到详细介绍这两个编译器的发行说明。

行为改变的时机使它看起来像与C18有关,但是6.6的措词似乎没有改变。对整数常量表达式的限制仍然严格(如第二行继续显示错误),第9段的措词似乎与C11中的相同,特别是继续说:“对象的值不应为C。通过使用这些运算符可以访问”(wrt []和朋友)。

通过阅读标准,第一个上下文是否是有效的初始化常量(不包括第10段)?我在哪里可能找到GCC / Clang变更的理由?

c language-lawyer constant-expression c11 c17

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

是否可以在Eclipse中的Java堆栈跟踪控制台中自动换行?

当我将Java堆栈跟踪粘贴到Eclipse中的Java堆栈跟踪控制台时,它们都被粘贴为一条长行.我没有在Java堆栈跟踪控制台中找到自动换行的选项.

有没有办法做到这一点?

java eclipse

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