Tag: C#的

cout“如何工作?

我想知道如何std::cout能够使用<<因为它的确如此。 我的主要困惑是与是否std::cout作为一个实例。 基本上,如何定义? 如果我这样做一个自定义的类,我需要某种实例… 我可以看到实现它是一种虚空指针或什么的黑客,但我想看看它的实际做法。 这里有人知道吗? 谢谢

为什么string文字l值而所有其他文字是r值?

C ++ 03 5.1主expression式 §2: 一个文字是一个主要的expression。 它的types取决于它的forms(2.13)。 一个string文字是一个左值; 所有其他文字是rvalues。 这背后的理由是什么? 据我所知,string文字是对象,而所有其他文字不是。而且一个l值总是指一个对象。 但问题是为什么string文字对象,而所有其他文字不是? 这个理由在我看来更像是鸡蛋或鸡肉的问题。 我理解这个答案可能与硬件架构有关,而不是C / C ++作为编程语言,不过我希望听到同样的答案。 注意:我将这个问题标记为c&c ++,因为C99标准也有类似的引用,特别是§6.5.1.4

ImageMagick和GraphicsMagick有什么区别?

我发现自己评估这两个库。 除了GraphicsMagick的比较之外,我看到ImageMagick仍然有更新,看起来两者差不多。 我只是想在C ++(即图像加载,filter,显示)做基本的image processing; 在select这些库时应该注意哪些差异?

在文件夹中创build类时更改默认命名空间(Visual Studio)

如何更改在Visual Studio中创build新类时使用的默认名称空间? 背景:我的解决scheme有一个项目MyCompany.MyProject.Domain,其中我有一个文件夹“Model Base(Linq)”,子文件夹“Extensions”中保留了所有的部分类扩展。 MyCompany.MyProject.Domain + Model Base (Linq) + Extensions – Order.cs – Trace.cs 当我在那里创build一个新的.cs文件时,命名空间被设置为MyCompany.MyProject.Domain.Model_Base \ _ \ _ Linq \ _ \ _ Extensions,但我只希望它是MyCompany.MyProject.Domain.Model。 我怎样才能改变这种默认行为?

C#切换大小写string开头

有什么办法可以在switch语句中创build一个case的条件吗? 前 Switch (mystring) { case("abc")://String begins with abc (abcd or abc1 or abcz or abc.. or abc will fall in this condition). //Do Something break; default: break; } 更新其他string可以是不同的长度。 ABC .. abczyv dcs2。 QWERTY 问

为什么内存函数,如memset,memchr …在string.h中,而不是在stdlib.h与另一个mem函数?

我想知道,为什么这样的function: -memset -memmov -memchr -memcpy 存在于string.h头文件中,但不存在于stdlib.h文件中,其中有其他标准的内存函数作为dynamic内存分配:malloc,calloc,realloc,free。 也许最好把它们合并成一个头文件? 你怎么看待这件事? 我不明白,为什么一组内存函数是分开的,并存在于string头(string.h)中。

C + + 11:std ::线程池?

在C ++ 03中,我使用了一个自build线程池的pthread,这个线程池始终保持着一些线程的运行(因为pthread_create比较慢),这样我就可以在不考虑性能问题的情况下为小任务启动线程。 现在,在C ++ 11中,我们有std::thread 。 我想标准没有说具体的实现,所以我的问题是关于标准库的实现。 他们通常select一个合并的方法构buildstd::thread是便宜的(例如,不会在posix上调用pthread_create ),或者将std::thread只是一个包装? 换句话说,在C ++ 11中仍然推荐使用线程池,还是只需要创build一个std::thread并将性能提高到标准库?

编译为C ++与C时,GCC代码生成的巨大差异

我一直在玩x86-64程序集,尝试了解更多可用的各种SIMD扩展(MMX,SSE,AVX)。 为了看看不同的C或C ++构造如何通过GCC转换为机器代码,我一直在使用Compiler Explorer ,它是一个非常出色的工具。 在我的一个“游戏会话”中,我想看看GCC如何优化整数数组的简单运行时初始化。 在这种情况下,我试图将0到2047的数字写入2048个无符号整数的数组中。 代码如下所示: unsigned int buffer[2048]; void setup() { for (unsigned int i = 0; i < 2048; ++i) { buffer[i] = i; } } 如果我启用优化和AVX-512指令-O3 -mavx512f -mtune=intel GCC 6.3生成一些真正聪明的代码:) setup(): mov eax, OFFSET FLAT:buffer mov edx, OFFSET FLAT:buffer+8192 vmovdqa64 zmm0, ZMMWORD PTR .LC0[rip] vmovdqa64 zmm1, ZMMWORD PTR .LC1[rip] .L2: […]

为什么这个未使用的variables没有被优化?

我和Godbolt的CompilerExplorer玩过。 我想看看某些优化有多好。 我最低工作的例子是: #include <vector> int foo() { std::vector<int> v {1, 2, 3, 4, 5}; return v[4]; } 生成的汇编程序(由clang 5.0.0,-O2 -std = c ++ 14): foo(): # @foo() push rax mov edi, 20 call operator new(unsigned long) mov rdi, rax call operator delete(void*) mov eax, 5 pop rcx ret 正如人们所看到的,铿锵知道答案,但在返回之前做了很多事情。 在我看来,即使vector是创build,因为“运营商新/删除”。 任何人都可以向我解释这里发生了什么,为什么它不只是返回? 由GCC生成的代码(不在这里复制)似乎明确地构造了向量。 有谁知道GCC不能推断出结果?

为什么没有Windows.Forms.TreeView的SelectedNodeChanged事件?

System.Web.UI.WebControls.TreeView类提供这个事件,但是TreeView的Forms版本没有。 表单世界中的等价物是什么? 我使用的是AfterSelect,但看起来不太正确。 也许这是我正在寻找的东西,但是文档有点朦胧。