Tag: C#的

为什么Visual Studio在这种情况下不执行返回值优化(RVO)

我正在回答一个问题,并build议按值返回一个大的types,因为我确信编译器会执行返回值优化(RVO) 。 但后来有人向我指出,Visual Studio 2013在我的代码上没有执行RVO。 我在这里发现了一个关于Visual Studio未能执行RVO的问题,但是在这种情况下,结论似乎是,如果真的很重要,Visual Studio将执行RVO。 在我的情况下,它确实很重要,它对性能的影响很大,我已经通过性能分析结果进行了确认。 这是简化的代码: #include <vector> #include <numeric> #include <iostream> struct Foo { std::vector<double> v; Foo(std::vector<double> _v) : v(std::move(_v)) {} }; Foo getBigFoo() { std::vector<double> v(1000000); std::iota(v.begin(), v.end(), 0); // Fill vector with non-trivial data return Foo(std::move(v)); // Expecting RVO to happen here. } int main() { std::cout << […]

可变参数模板的部分专业化

考虑以下类模板“X”及其部分专业化。 template <class …Types> struct X {}; // #1 template <class T1> struct X<T1> {}; // #2 template <class T1, class …Types> struct X<T1, Types…> {}; // #3 X<int> x; // #2 or #3 ? 我怀疑X <int>是不明确的。 这是因为: 很明显,#2和#3比现在比较#1,#2和#3更专业。 根据14.5.5.2,让我们考虑以下#2和#3中哪一个更专业。 template <class T1> void f(X<T1>); // #2' template <class T1, class …Types> void f(X<T1, Types…>); […]

C ++名称parsing(和重载)规则列表

在哪里可以findC ++兼容编译器为了执行名称parsing (包括重载)而必须应用的规则列表? 我喜欢自然语言algorithm或stream程图。 C ++标准当然有这套规则,但它是在引入新的语言语句的基础上build立起来的,结果很难记住。 长话短说,我想知道“ 什么编译器在看到名字”A“时做了什么? 我知道C ++是“ 我们这样做,而不是Y,如果Z持有 ”,所以,我问是否有可能使它更线性。 编辑 :我正在研究这个话题的草稿,一旦发布可能会被集体改善。 不过,我现在很忙,可能需要一些时间来宣传。 如果有人感兴趣,我会促进“个人注意到一个原始的txt文件”更好的东西,并张贴。

返回64位整数中所有设置位的位置的最快方法是什么?

我需要一个快速的方法来获得一个64位整数的所有位的位置。 例如,给定x = 123703 ,我想填充一个数组idx[] = {0, 1, 2, 4, 5, 8, 9, 13, 14, 15, 16} x = 123703 idx[] = {0, 1, 2, 4, 5, 8, 9, 13, 14, 15, 16} 。 我们可以假设我们知道比特数的先验。 这将被称为10 ^ 12 – 10 ^ 15倍,所以速度是至关重要的。 到目前为止,我提出的最快答案是下面的怪异问题,它使用64位整数的每个字节作为表中的索引,给出该字节中设置的位数和位置: int64_t x; // this is the input unsigned char idx[K]; // this […]

Xml文件不能复制到testing输出目录

Visual Studio 2010,x64机器,使用内置的Web服务器来托pipe一个使用内置testing框架进行unit testing的WCF服务。 我有一个XML文件,我的testing需要加载运行。 我将这个文件包含在testing项目中,并将文件设置为“内容”,并且“始终复制到输出目录”。 此文件复制到bin \ debug目录罚款。 但是,当我执行testing时,xml文件不在那里。 它不是在项目的bin \ debug文件夹中查找,而是在testing的工作目录C:\ Projects \ SAP Reapprovals \ TestResults \ name_machine 2010-12-06 13_45_43 \ Out中查找它。 。 有没有办法强制这个文件复制,还是我需要从testing内完全限定参考? TIA! 詹姆士 更新 我设置了DeploymentItem属性,但该文件仍然不会被复制。 但是,这看起来像我想要的…任何想法,为什么这是行不通的? 我的testing代码: [TestMethod] [DeploymentItem("SAP – GS3 format.xml")] public void TestProcessSapRoles() { // I get a 'file not found' error here, and when // I […]

在协作环境中迁移entity framework

我们有多个开发人员在使用Entity Framework 5.0的项目上工作。 每个开发人员都使用他自己的本地SQL 2012数据库,以便在不妨碍其他人的情况下开发和testing。 起初,我们使用了自动迁移和基于代码的迁移的混合。 这根本不能很好地工作,所以我们决定禁用自动迁移,只允许基于代码。 我应该补充一点,我们再次启动一个干净的数据库,没有从所有的自动迁移中“损坏” _MigrationsHistory 。 所以现在的工作stream程是: 开发人员更改他的数据模型 add-migration <Name>并将其应用到他的数据库与update-database 。 检查数据模型更改和迁移到Git。 另一个开发人员将接收更改并将其应用于其数据库。 到目前为止,这工作得很好。 然而,在今天之前,通常只有我是使移民和其他人实行移民。 但是今天有三个开发者的迁移。 我只是把这些迁移,做了一个update-database ,这很好。 然而,我也对自己的datamodel进行了修改,所以在update-database的最后,它给了我一个警告,说明我还没有及时更新,所以我做了add-migration <my migration> 。 但是,当它支持迁移时,它给了我已经应用到数据库的所有迁移的变化。 所以:它试图删除已经被删除的列,尝试创build一个已经存在的表等。 怎么可能? 我的假设是,EF只会检查_MigrationsHistory表,并找出表中尚未出现哪些迁移,然后逐一应用名称中包含的时间戳。 但显然不是,因为即使当我撤消自己的变化,我有一个干净的环境,它仍然抱怨我的数据库不与模型同步。 但我只是把这些改变,并将其应用到我的数据库。 它是同步的。 我可以看到我刚刚在_MigrationsHistory表中应用的迁移。 我能想到的唯一的事情是我添加了一个属性到一个datamodel,不会导致数据库的变化(我添加了一个List<X> datamodel Y其中X是在一对多关系中的许多。这不会导致数据库更改,因为X已经有一个外键到Y)。 那可以吗? 如果是这样,这真的很脆弱,因为没有办法为此添加迁移,因为没有数据库更改,我不知道如何解决这个问题。 我不知道如何处理这个问题,因为我当然可以编辑它的脚手架,并删除已经应用到我的数据库的所有东西。 但是呢? 我检查了一下,然后其他一些开发者得到了同样的信息,即使在应用我的新变更之后,他的数据库也没有及时更新,脚手架自己的变化,得到同样的废话脚手架,编辑它,检查它,然后下一个开发人员得到它。 它变成了一个恶性循环,与我们使用自动迁移时所遇到的类似,我认为我们已经通过切换到仅基于代码的方式来解决这个问题。 现在我不能相信它做正确的事情,这是一个噩梦,这样的工作。 我也尝试过使用update-database -t:201211091112102_<migrationname>将我从同事那里获得的迁移一一添加,但无济于事。 它仍然给我错误的脚手架。 那么,我们在这里做错了什么,或者EF是不是为这样的协作而build? UPDATE 我创build了一个可重复的testing用例,但是为了模拟这个多用户/多数据库场景,这是一个漫长的舞蹈。 https://github.com/JulianR/EfMigrationsTest/ 有上述项目时重现的步骤(这些步骤也存在于代码中): 添加迁移Init 更新数据库(在数据库'TestDb') 将连接string更改为指向TestDb1 […]

这是代码行为定义?

以下代码打印到控制台是什么? map<int,int> m; m[0] = m.size(); printf("%d", m[0]); 可能的答案: 代码的行为没有被定义,因为它没有定义编译器首先执行m[0]或m.size()哪个语句。 所以它可以打印1以及0 。 它打印0是因为赋值运算符的右侧首先被执行。 它打印1因为operator[]具有完整语句m[0] = m.size()的最高优先级。 因此,发生以下一系列事件: m[0]在地图中创build一个新的元素 m.size()被调用,现在是1 m[0]被赋予先前返回的(由m.size()) 1 真正的答案? ,这是我不知道的^^

如果nullptr_t不是关键字,为什么char16_t和char32_t?

正如为什么是nullptr_t不是关键字所讨论的那样,最好避免引入新的关键字,因为它们可能会破坏向后兼容性。 那么为什么char16_t和char32_t关键字可以像这样定义呢? namespace std { typedef decltype(u'q') char16_t; typedef decltype(U'q') char32_t; }

在C / C ++中编写“真正的”交互式terminal程序,如vim,htop,…不带ncurses

不,我不想使用ncurses ,因为我想了解terminal是如何工作的,并且乐于自己编程。 :)它不必是便携式的,它只能在基于Linux xterm的terminal仿真器上工作。 我想要做的是编写一个像htop和vim这样的交互式terminal应用程序。 我的意思不是看起来像盒子或设定颜色的字符的输出,这是微不足道的; 也使内容适合窗口大小。 我需要的是 如何让鼠标交互像点击一个字符和滚动鼠标滚轮(当鼠标是在一个特定的字符)来实现滚动[ 编辑:当然在terminal模拟器 ],和 如何完全保存和恢复父进程的输出,并从输出中分离我的打印,所以在离开我的应用程序之后,除了我在shell中input的命令之外,应该在那里,就像运行htop并退出时一样:没有任何东西可见从这个应用程序了。 我真的不想使用ncurses。 但是,当然,如果你知道ncurses的哪个部分负责这些任务,欢迎告诉我在源代码的哪里可以find它,所以我会研究它。

使用Windows域帐户和应用程序pipe理的帐户

创build一个基于Windows域用户进行身份validation的ASP.NET MVC应用程序很容易。 创build一个使用entity framework存储的个人账户也很容易。 实际上,两者都有项目模板。 但是我想在同一个应用中使用两种authentication。 我试图合并来自两个项目模板的代码。 我在Startup.Auth.cs中遇到问题。 // from "Individual Accounts" template app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), Provider = new CookieAuthenticationProvider { OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(30), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) } }); cookie身份validationowin中间件的存在似乎导致域身份变得未经身份validation。 如果我把这条线路出去,域authentication工作。 但没有它,我似乎无法支持个人用户帐户。 我已经下载了katana项目的源代码,并检查了CookieAuthenticationHandler.cs,但我不太明白它是如何在OWINpipe道的上下文中工作的。 如何使用ASP.net身份框架来允许我的应用程序从Windows域或特定于应用程序的用户存储validation用户?