假设有一个std::array被初始化。 没关系,如果使用双花括号: std::array<int, 2> x = {{0, 1}}; std::array<int, 2> x{{0, 1}}; 在旧的聚合初始化中使用单个大括号也是可以的,因为大括号将会照顾大括号: std::array<int, 2> x = {0, 1}; 但是,使用单个大括号进行列表初始化可以吗? GCC接受它,Clang拒绝使用“在使用直接列表初始化时,不能忽略子对象初始化时的括号”。 std::array<int, 2> x{0, 1}; 提到大括号的唯一部分是8.5.1 / 12,它说: 使用赋值expression式初始化聚合成员时,将考虑所有隐式types转换(第4章)。 如果赋值expression式可以初始化一个成员,则该成员被初始化。 否则,如果该成员本身是一个子集合,则假定支撑精确,并且为该子集合的第一个成员的初始化考虑赋值expression式。 8.5.1是关于具体的聚合初始化的,所以应该表示铿锵拒绝是正确的吧? 没那么快 8.5.4 / 3说: Ttypes的对象或引用的列表初始化定义如下: […] – 否则,如果T是聚合,则执行聚合初始化(8.5.1)。 我认为这意味着与汇总初始化(包括大括号)一样的规则也适用,这意味着GCC是正确的接受。 我承认,措辞不是特别清楚。 那么,哪个编译器对待第三个片段是正确的呢? 大括号是否在列表初始化中发生,或者不是?
有时候用一个C程序来模拟一些使用大量静态内存的东西是很方便的。 我注意到,在转换到Fedora 15之后,程序花了很长时间来编译。 我们正在谈论30s与0.1s。 更奇怪的是,ld(链接器)正在耗尽CPU,慢慢地开始占用所有可用的内存。 经过一番捣鼓,我设法find了这个新问题和我的交换文件的大小之间的关系。 以下是本次讨论的示例程序: #include <string.h> #include <stdlib.h> #include <stdio.h> #define M 1000000 #define GIANT_SIZE (200*M) size_t g_arr[GIANT_SIZE]; int main( int argc, char **argv){ int i; for(i = 0; i<10; i++){ printf("This should be zero: %d\n",g_arr[i]); } exit(1); } 这个程序有一个巨大的数组,声明的大小约为200 * 8MB = 1.6GB的静态内存。 编译这个程序需要花费过多的时间: [me@bleh]$ time gcc HugeTest.c real 0m12.954s user […]
根据(c)ANSI ISO / IEC 14882:2003,第127页: 联动规格嵌套。 当联动规范嵌套时,最内层的决定语言。 联动规范不build立范围。 链接规范只能在命名空间范围(3.3)中出现。 在一个链接规范中,指定的语言链接适用于由声明引入的所有函数声明符,函数名称和variables名称的函数types。 extern "C" void f1(void(*pf)(int)); // the name f1 and its function type have C language // linkage; pf is a pointer to a C function extern "C" typedef void FUNC(); FUNC f2; // the name f2 has C++ language linkage and the // function's type […]
所以,我是一个相当新的程序员,他的工作经验非常less,正在攻读大学生科学与技术学位。 在为我的程序寻找实习型工作时,我注意到我从几位教授那里听到的“使用数据库占现代计算机科学工作的90%” – 看起来确实如此。 然而,我的课程直到3年级才有真正的数据库课程,所以我至less要自己学习一些东西。 对于像我这样的人来说,我在networking和互联网上看到的东西很less。 似乎有大量关于如何读取和写入数据库中的数据的机制的教程,但关于相关的最佳实践很less。 为了说明我在说什么,并帮助解决我的实际问题,这里是在互联网上很容易find的东西 : public static void Main () { using (var conn = new OdbcConnection()) { var command = new OdbcCommand(); command.Connection = conn; command.CommandText = "SELECT * FROM Customer WHERE id = 1"; var dbAdapter = new OdbcDataAdapter(); dbAdapter.SelectCommand = command; var results = new DataTable(); dbAdapter.Fill(results); } […]
我们遇到了一个魔法十进制数,打破了我们的哈希表。 我把它归结为以下最小的情况: decimal d0 = 295.50000000000000000000000000m; decimal d1 = 295.5m; Console.WriteLine("{0} == {1} : {2}", d0, d1, (d0 == d1)); Console.WriteLine("0x{0:X8} == 0x{1:X8} : {2}", d0.GetHashCode(), d1.GetHashCode() , (d0.GetHashCode() == d1.GetHashCode())); 给出以下输出: 295.50000000000000000000000000 == 295.5 : True 0xBF8D880F == 0x40727800 : False 真正奇怪的是:更改,添加或删除d0中的任何数字,问题就消失了。 即使添加或删除一个尾随零! 标志似乎并不重要。 我们的解决办法是将值除以尾随的零,如下所示: decimal d0 = 295.50000000000000000000000000m / 1.000000000000000000000000000000000m; 但是我的问题是,C#如何做错了?
我有一个testing的基类,它由以下几个方面组成: [TestClass] public abstract class MyBaseTest { protected static string myField = ""; [ClassInitialize] public static void ClassInitialize(TestContext context) { // static field initialization myField = "new value"; } } 现在我试图创build一个新的testing,从基地inheritance,具有以下签名: [TestClass] public class MyTest : MyBaseTest { [TestMethod] public void BaseMethod_ShouldHave_FieldInitialized() { Assert.IsTrue(myField == "new value"); } } ClassInitialize永远不会ClassInitializetesting调用…在MsTest上inheritance使用testing初始化的真正和正确的方法是什么?
是否有可能使用相同的代码库开发和构buildXamarin的Linux应用程序? Ubuntu几年后,我的主要操作系统现在是Windows。 但是,这不是不可能的,我可以切换到Mac。 Rigth现在我有一些Qt的经验,没有Xamarin的经验。 使用Qt,您可以在Windows,Linux和Mac以及Windows,Linux,Mac,iOS,Android,Windows Mobile …下进行开发。 由于Xamarin现在是免费和开源的,而且我在Qt方面还没有太多的经验,所以我正在考虑尝试Xamarin进行跨平台开发,而不是Qt。 不能发布我的Linux软件将是一个打击我的。 能够在Linux下开发会很好,但可选。 但毕竟我的谷歌研究,我只能find信息和人要求支持开发在Linux下,而不是在Linux。 据我所知,Mono本身不应该是一个问题。 但据我所知,Xamarin> Mono,我没有得到Mono的一切,我可以进入Xamarin。 我也不确定未来Mono的支持程度如何。 对我来说,看起来Xamarin对于微软来说比Mono本身更重要。 我不确定是否有可能,因为Xamarin是基于Mono的,但是有可能,微软在某种程度上是否像Xamarin一样支持不支持Mono的.NET兼容性,甚至完全取消Mono? 所以我正在寻找一个可以依赖的桌面和移动平台的单一框架,我想知道Xamarin和/或Mono和/或Xamarin + Mono是否可以替代Qt,然后再深入到任何这两个解决scheme。
只是好奇为什么字典不被XmlSerializer支持? 通过使用DataContractSerializer并将该对象写入XmlTextWriter ,您可以轻松解决这个问题,但是由于字典的特性使得XmlSerializer难以处理,因为它实际上是一个KeyValuePairs数组。 实际上,您可以将IDictionary<TKey, TItem>传递给期望IEnumerable<KeyValuePairs<TKey, ITem>> 。
我刚刚遇到了.NET 4中新增的MemoryCache 。 我明白,如果你想要: 限制caching的总内存使用量 为放置在caching中的对象设置一个对象到期时间(生存时间) 有没有其他令人信服的理由使用一个标准Dictionary<string,object>的MemoryCache 我有几本关于C#和.NET的书,没有任何地方提及它。
build立(用于Linux)C ++应用程序是用Visual Studio编写的最好和最简单的方法是什么? 代码本身就绪 – 我只使用跨平台的库。 是否有可能在Windows下在Visual Studio中准备一切,然后在Linux下使用CLI工具来构build它? 有没有文件描述这个? 编辑:一些更多的信息: 使用的libs:stl,wxwidgets,boost,asio,cryptlib。 非常less的Linux知识。 编辑#2:我select了以下解决scheme:使用kdevelop创build新项目并编译所有内容。