Tag: C#的

std :: function的模板参数是如何工作的? (实现)

在Bjarne Stroustrup的主页( C ++ 11 FAQ )中: struct X { int foo(int); }; std::function<int(X*, int)> f; f = &X::foo; //pointer to member X x; int v = f(&x, 5); //call X::foo() for x with 5 它是如何工作的? std :: function如何调用foo成员函数 ? 模板参数是int(X*, int) ,是从成员函数指针转换成非成员函数指针的 &X::foo ? (int(*)(X*, int))&X::foo //casting (int(X::*)(int) to (int(*)(X*, int)) 澄清:我知道我们不需要使用任何指针来使用std :: function […]

试图了解gcc选项-fomit-frame-pointer

我要求Google给我gcc选项的含义-fomit-frame-pointer ,它将我redirect到下面的语句。 -fomit帧指针 不要将帧指针保存在寄存器中 需要一个。 这避免了保存,设置和恢复帧的说明 指针; 它也使许多function提供额外的寄存器。 它 也使一些机器上的debugging成为不可能。 根据我对每个函数的了解,一个激活logging将在进程内存堆栈中创build,以保留所有局部variables和更多信息。 我希望这个帧指针意味着一个函数的激活logging的地址。 在这种情况下,哪些types的函数不需要将帧指针保存在寄存器中? 如果我得到这个信息,我会尝试devise新的函数(如果可能的话),因为如果帧指针没有保存在寄存器中,一些指令在二进制中将被忽略。 这在function很多的应用程序中会显着提高性能。

工作单位+存储库模式:商业交易概念的下降

Unit of Work和Repository Pattern是当今相当普遍的用法。 正如马丁·福勒( Martin Fowler) 所言 ,使用物UoW的目的是形成一个商业交易,同时UoW知道存储库实际上是如何工作的(持续的无知)。 我已经回顾了许多实现; 并忽略具体的细节(具体/抽象类,接口……),它们或多或less类似于下面的内容: public class RepositoryBase<T> { private UoW _uow; public RepositoryBase(UoW uow) // injecting UoW instance via constructor { _uow = uow; } public void Add(T entity) { // Add logic here } // +other CRUD methods } public class UoW { // Holding one repository […]

在C99中,f()+ g()是未定义的还是仅仅是未指定的?

我曾经认为在C99中,即使函数f和g的副作用受到干扰,尽pipeexpression式f() + g()不包含序列点,但f和g将包含一些,所以行为会未指定:f()将在g()之前调用,或者在f()之前调用g()。 我不再那么肯定。 如果编译器内联函数(编译器可能决定执行哪个函数(即使这些函数没有声明为inline函数),然后重新排列指令呢? 可能有人得到上述两个不同的结果吗? 换句话说,这是不确定的行为? 这不是因为我打算写这样的东西,这是在静态分析器中为这样的陈述select最好的标签。

对象,右值引用,const引用之间的重载parsing

给定所有这三个函数,这个调用是不明确的。 int f( int ); int f( int && ); int f( int const & ); int q = f( 3 ); 除去f( int )会导致Clang和GCC优先于左值引用的右值引用。 但相反,删除任何引用重载都会导致f( int )模糊。 重载parsing通常是用严格的偏序来完成的,但是int似乎相当于两个不相等的东西。 这里的规则是什么? 我似乎记得有关这方面的缺陷报告。 在未来的标准中, int &&可能比int更int吗? 引用必须绑定到初始化程序,而对象types不是那么受限制。 因此, T与T &&之间的重载可能有效地意味着“如果给予所有权,则使用现有对象,否则复制”。 (这与纯传值类似,但是节省了移动的开销)。由于这些编译器当前正在工作,所以这必须通过重载T const &和T && ,并明确复制来完成。 但我甚至不确定这是否是严格的标准。

VBCSCompiler.exe的许多实例

我刚刚下载并安装了Visual Studio Professional 2015(14.0.23107.0)。 我第一次打开我们的解决scheme(28个项目),并执行了Build – > Rebuild Solution,我的开发机器就完全爬了起来。 CPU达到100%,构build从未完成 – 即使在10分钟以上。 我打开Windows任务pipe理器,发现:> 10 VBCSCompiler.exe任务正在运行。 结合起来,这些任务发送CPU> 90%。 任何想法为什么有这么多这些任务运行? 任何方法来阻止这种情况的发生? 这是我能find遇到同样问题的其他人最接近的事情: https : //github.com/dotnet/roslyn/issues/2790 更新(8/7) – 汉斯·帕斯特,深思熟虑。 我的经理向我提供了这个版本(14.0.23107.0)。 这是“正式版”的正确版本吗? 我不知道安装任何发行版本的Visual Studio 2015.我不认为有任何testing位左右。 -Kyle Trauberman,我不熟悉Visual Studio上下文中的环境variables; 然而,我天真地在VS(和MSBuild)命令提示符窗口中运行set DisableRosyln=true 。 这似乎没有任何影响。 即使重新启动VS2015,VBCSCompiler.exe也显示正确的备份。 我修复了我的VS2015安装并重新启动。 这没有帮助。 更新第2部分(8/7) – 汉斯帕斯特 ,非常令人印象深刻的写! 虽然这个问题没有发生,但我看了一下你所描述的东西: 至于模块加载VBCSCompiler.exe,这是我有: 有趣的是,我们的.NET核心程序集是在不同的版本。 你在4.06.79,而我在4.06.81。 我的“客户端dll”(位于C:\ Program Files文件(x86)\ MSBuild \ 14.0 […]

Roslyn是否跨平台?

我已经看了很长一段时间罗斯林 ,我很好奇,兴奋。 我注意到的一件事是他们提到编译器被重写成托pipe代码。 这就提出了Roslyn是否能够在非.NET虚拟机(如Mono)上运行的问题。 我真的很喜欢在我的video游戏中使用RoslynembeddedC#脚本,并且在我的应用程序中使用了许多其他function,但是我想知道是否使用Roslyn将打破它在Mono上运行的能力。 有没有人试过在Mono上运行Roslyn? 可能吗? 为什么或者为什么不? 为了澄清,我对是否可以在单声道上运行托pipe程序集以及是否可以生成单声道可以运行的程序集感兴趣。

在没有预处理步骤的情况下,Qt可用性如何?

我认为图书馆需要用特殊工具预处理我的源代码是不合理的。 也就是说,有几个人向我推荐了Qt库进行跨平台的GUI开发。 没有预处理步骤,Qt的可用性如何? 编辑:好的人,我不是意味着这个问题作为对Qt的裂口 – 太多的Qt粉丝正在对待它,就好像它是。 我不想讨论Qt提出这个预处理工具的优点。 我明白为什么这个工具就在那里,而且我明白为什么Qt的devise有很大一部分是build立在预处理的基础上的。 我从来没有使用过Qt,所以我没有任何权利去解决这个问题。 但是我更愿意自己写小量的样板文件,而不是依靠把整个构build过程拆开。 我不会因为同样的原因在我现在的项目中使用Flex和Bison。 如果我不使用这些工具,我绝对不会使用另一种预处理。 所以,请不要把我当作Qt的翻版。 我无法评论它有多好或不好; 我没有用过 我只是想知道是否有可能使用它没有moc 。

什么导致了破pipe错误?

我知道,当对方的套接字closures时,抛出了错误的pipe道错误。 但是,在我的testing中,我注意到,当对方closures时,立即在这一侧的“发送”呼叫并不总是导致pipe道故障错误。 例如: 在closures对端的套接字后(我曾尝试通过调用close来清除closures,也通过查杀exception来closuresexception),如果我尝试发送40个字节,那么我不会得到一个坏的pipe道,但是,如果我尝试发送40000字节,然后立即给pipe道错误的错误。 究竟是什么原因导致了pipe道破裂,并预测其行为?

C ++ switch语句expression式评估保证

关于交换机的标准说明如下。 “执行switch语句时,评估其条件并与每个case常量进行比较。 这是否意味着条件expression式只被一次性评估,并且由每个编译器的标准来保证呢? 例如,在switch语句头中使用某个函数时,会带来副作用。 int f() { … } switch (f()) { case …; case …; }