Tag: C#的

没有“右值引用* this”特性的解决方法

我有一个围绕可移动对象的代理容器类,并希望代理能够隐式地产生对基础对象的右值引用,但只有当代理本身被移动时。 我相信我将能够按照提议n2439 “将移动语义扩展到* this”来实现此行为,但是它在gcc的发行版中还不可用,并且不会有一段时间。 下面的代码是我最终瞄准的,但目前不可能。 在此function可用之前,是否有任何等效的解决方法? template< class T > struct movable_proxy { operator T&&() && { return std::move(value); } operator const T&() const& { return value; } private: T value; };

AvalonEdit:级联突出显示色彩

我想级联AvalonEdit的SyntaxHighlighting引擎。 我有2个HighlightingDefinitions 。 第一个是主要的语法。 第二个是复杂的多行预处理器标记语言。 出于这个原因,在第一个语法中embedded第二个语法太复杂了。 更简单的方法是呈现第一个语法,然后更改受影响的行部分(基于第二个语法)。 于是我用第二种语言实例化了一个新的HighlightingColorizer ,并将其添加到LineTransformers 。 但是第二种语言使整个文档变色,而不仅仅是带有预处理器指令的行部分:非预处理器代码是黑色的。 当我debugging第二行变换器的ColorizeLine方法时,非突出显示的代码(=没有预处理器代码)的行没有按预期着色。 但是线条的颜色是黑色的。 那么在开始着色之前, HighlightingColorizer重置了整个文档的所有以前的突出显示? 还有什么可能是这个问题? 我怎样才能正确地级联2 HighlightingColorizers ?

默认值,零初始化乱七八糟

我对值初始化和默认初始化非常困惑。 特别是当他们开始使用不同的标准C ++ 03和C ++ 11 (和C ++ 14 )时。 我引用并试图扩展一个非常好的答案Value- / Default- / Zero-Init C ++ 98和C ++ 03在这里使它更通用,因为如果有人可以帮助填写需要的差距有一个很好的概述什么时候发生? 简而言之,通过实例的全面洞察力: 有时,新运算符返回的内存将被初始化,有时它不会取决于新build的types是POD(普通旧数据) ,还是包含POD成员的类,并且正在使用编译器生成的默认构造函数。 在C ++ 1998中有两种types的初始化:零和默认 在C ++ 2003中第三种types的初始化,增加了值初始化。 在C ++ 2011 / C ++ 2014中,只添加了列表初始化,并且value- / default- / zero-initialization的规则有所改变。 承担: struct A { int m; }; struct B { ~B(); int m; }; struct […]

在C / C ++的无符号左移之前掩盖了是否偏执?

这个问题是由我在C / C ++中实现encryptionalgorithm(例如SHA-1),编写可移植的平台不可知的代码,并彻底避免未定义的行为 。 假设一个标准化的encryptionalgorithm要求你实现这个: b = (a << 31) & 0xFFFFFFFF 其中a和b是无符号的32位整数。 注意在结果中,我们丢弃了最不重要的32位以上的任何位。 作为第一个天真的近似,我们可以假定int在大多数平台上是32位宽的,所以我们可以这样写: unsigned int a = (…); unsigned int b = a << 31; 我们知道这个代码不会在任何地方工作,因为int在某些系统上是16位宽,在其他系统上是64位,甚至可能是36位。 但是使用stdint.h ,我们可以用uint32_ttypes来改进这个代码: uint32_t a = (…); uint32_t b = a << 31; 所以我们完成了,对吧? 这就是我多年来的想法。 … 不完全的。 假设在某个平台上,我们有: // stdint.h typedef unsigned short uint32_t; 在C / C […]

我可以从我的应用程序抛出哪些内置的.NETexception?

如果我需要从我的应用程序中抛出一个exception,我可以使用哪些内置的.NETexception类? 他们都是公平的游戏吗? 我应该何时得到我自己的?

Visual Studio代码分析与StyleCop + FxCop

我之前在我的Visual Studio项目中使用过StyleCop + FxCop。 但是现在我正在testingVisual Studio代码分析工具,这个工具更容易集成到MSBuild中,我发现这个工具分析了FxCop和StyleCop的一些规则。 这个工具是否完全取代了FxCop和StyleCop,还是只是实现了一些规则?

ASP.NET MVC 5与WebMatrix SimpleMembershipProvider不兼容吗?

我们有一个基于ASP.NET MVC 4和Web API的现有应用程序。 该网站的pipe理员部分使用简单成员资格。 我有兴趣将应用程序升级到MVC 5 / Web API 2,以利用已经添加的一些新function。 但看起来他们可能不兼容。 具体来说,在将NuGet中的RC包安装到我的解决scheme中的一个项目中并更新web.config信息之后 ,应用程序在调用WebSecurity.InitializeDatabaseConnection()的行的启动过程中开始死亡,但有以下例外: [MethodAccessException: Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(System.Object, WebMatrix.Data.ConnectionEventArgs)' to access security critical method 'System.Web.WebPages.HttpContextExtensions.RegisterForDispose(System.Web.HttpContextBase, System.IDisposable)' failed.] WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(Object sender, ConnectionEventArgs e) +70 WebMatrix.Data.Database.OnConnectionOpened() +70 WebMatrix.Data.Database.EnsureConnectionOpen() +51 WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63 WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +13 WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, […]

C ++中的空和std :: shared_ptr有什么区别?

cplusplus.com shared_ptr页面调用了一个空的 std::shared_ptr和一个空的 shared_ptr之间的区别。 cppreference.com页面并没有显式调用这个区别,但是在std::shared_ptr行为的描述中同时使用了“empty”和与nullptr比较。 空的和空的shared_ptr有区别吗? 有没有这种混合行为指针的用例? 非空的shared_ptr是否有意义? 在正常的使用情况下(即,如果你没有明确地构造一个),在哪里可能会遇到空 – 但是非空的shared_ptr ? 如果您使用Boost版本而不是C ++ 11版本,那么这些答案中的任何一个都会改变吗?

在C#事件处理程序中,为什么必须将“sender”参数作为对象?

根据Microsoft事件命名指南 ,C#事件处理程序中的sender参数始终是对象types,即使可以使用更具体的types“。 这导致了很多事件处理代码,如: RepeaterItem item = sender as RepeaterItem; if (item != null) { /* Do some stuff */ } 为什么大会build议不要使用更具体的types来声明事件处理程序? MyType { public event MyEventHander MyEvent; } … delegate void MyEventHander(MyType sender, MyEventArgs e); 我错过了一个陷阱? 对于后人来说:我同意普遍的观点,即约定是使用对象(即使有可能使用更具体的types也要通过EventArgs传递数据,而在现实世界的编程中,重要的是要遵循公约。

C ++:将一个操作数保存在一个寄存器中,这个速度非常巨大

我一直想通过使用下面的代码来计算一个对数组元素进行扩展和求和的例程,来了解在L1caching中的数组对数组的影响。(我知道我应该通过' a“;关键是在循环中同时执行乘法和加法操作 – 到目前为止,编译器还没有计算出”a“): double sum(double a,double* X,int size) { double total = 0.0; for(int i = 0; i < size; ++i) { total += a*X[i]; } return total; } #define KB 1024 int main() { //Approximately half the L1 cache size of my machine int operand_size = (32*KB)/(sizeof(double)*2); printf("Operand size: %d\n", operand_size); double* X […]