我在C ++中有一个(生成的)string,可能包含需要使用\x符号转义的字符。 例如: char foo[] = "\xABEcho"; 但是,g ++(版本4.1.2,如果它很重要)会抛出一个错误: test.cpp:1: error: hex escape sequence out of range 编译器似乎将Ec字符视为前面的hex数字的一部分(因为它们看起来像hex数字)。 由于四位hex数字不适合char ,因此会引发错误。 很显然,对于宽stringL"\xABEcho" ,第一个字符是U + ABEC,后面是L"ho" 。 在过去的几十年里,这似乎已经改变了,我从未注意到。 我几乎可以确定,旧的C编译器只会考虑\x之后的两个hex数字,而不会再看。 我可以想到一个解决方法: char foo[] = "\xAB""Echo"; 但是这有点难看 所以我有三个问题: 这是什么时候改变的? 为什么编译器只接受宽string文本的> 2位hex转义符? 有没有比上面更尴尬的解决方法?
我正在尝试在C ++中devise一个通用的(但有点用例的)事件传递机制,而不是针对“新风格”C ++的谷物,同时也不用过度使用模板。 我的用例有点特别,因为我需要完全控制事件发布的时间。 事件系统是世界模拟的基础,世界的每一次迭代都会对前一帧产生的事件起作用。 所以我要求所有事件在被分派之前排队等候,这样应用程序就可以按照特定的时间间隔刷新队列,就像传统的GUI事件循环一样。 我的用例在Ruby,Python甚至C中实现是微不足道的,但是用C ++来说,我有点儿短了。 我曾经看过Boost :: Signal和其他类似的库,但是它们看起来太复杂或不灵活,不适合我的特殊用例。 (Boost,尤其是基于模板的语言,经常会导致混淆,特别是boost :: bind或boost :: function)。 这是系统,广泛的笔触: 消费者通过直接注册产生事件的对象来收听事件。 事件只是string名称,但每个事件都可能有附加的数据。 听众只是方法。 如果这是C ++ 11,我会使用lambdas,但是我需要广泛的编译器可移植性,所以现在使用方法。 当一个生产者触发一个事件时,事件进入队列,直到将其分派到监听者列表。 队列按照事件触发的严格顺序进行调度。 (所以如果生产者A触发事件x,生产者B触发y,生产者B再次触发z,那么总的顺序是x,y,z。) 重要的是,听众所产生的任何事件在下一次迭代之前都不会被调度 – 所以在内部真的有两个队列。 下面是一个消费者的“理想”的伪代码示例: SpaceshipController::create() { spaceship.listen("crash", &on_crash); } SpaceshipController::on_crash(CrashEvent event) { spaceship.unlisten("crash", &on_crash); spaceship.remove(); add(new ExplosionDebris); add(new ExplosionSound); } 这是一个生产者: Spaceship::collided_with(CollisionObject object) { trigger("crash", new CrashEvent(object)); } 所有这一切都很好,但是翻译成现代C […]
考虑下面的代码片段 typedef int type; int main() { type *type; // why is it allowed? type *k ;// which type? } 我得到一个错误'k' is not declared in this scope 。 编译器将type *kparsing为type*和k之间的乘法。 这个语法不是很混乱吗? 为什么是C ++标准允许的type *type ? 因为语法是这样说的? 为什么?
我有从数据库派生的以下EF类 (简化) class Product { public string ProductId; public string ProductName; public string CategoryId; public string CategoryName; } ProductId是表格的主键 。 对于由数据库devise人员做出的糟糕的devise决定(我无法修改它),我在这个表中有CategoryId和CategoryName 。 我需要一个DropDownList (独特) CategoryId作为值和CategoryName作为文本 。 所以我申请了下面的代码: product.Select(m => new {m.CategoryId, m.CategoryName}).Distinct(); 这在逻辑上应该创build一个具有CategoryId和CategoryName属性的匿名对象。 Distinct()保证没有重复对( CategoryId , CategoryName )。 但实际上这是行不通的。 就我所了解的Distinct()作品,只有一个字段在集合中,否则它只是忽略它们…是否正确? 有没有解决办法? 谢谢! UPDATE 对不起, product是: List<Product> product = new List<Product>(); 我发现了一个替代方法来获得与Distinct()相同的结果: product.GroupBy(d => new {d.CategoryId, […]
对线程进行命名是很有帮助的,因此可以对哪些线程进行诊断和debugging目的进行分类。 对于multithreading应用程序中的线程是否有一个特定的命名约定,比另一个更好? 任何指导? 什么样的信息应该进入一个线程的名称? 你有什么了解你的线程命名,可能有助于其他人?
编译器(如GCC)如何分配const和static constvariables,如何在其驻留的位置? 在数据存储器或程序存储器中?
经常教授的标准数组大小的macros是 #define ARRAYSIZE(arr) (sizeof(arr) / sizeof(arr[0])) 或者一些等同的forms。 然而,当一个指针被传入时,这种事情默默地成功了,并且给出了在运行时似乎是合理的结果,直到事情神秘崩溃。 这太容易犯这个错误了:一个具有本地数组variables的函数被重构,将一些数组操作转移到一个新的函数中,并以该数组作为参数调用。 所以,问题是:是否有一个“卫生”的macros来检测C语言中的ARRAYSIZEmacros的滥用,最好在编译时? 在C ++中,我们只使用专门用于数组参数的模板; 在C中,似乎我们需要一些方法来区分数组和指针。 (如果我想拒绝数组,例如,我只是做例如(arr=arr, …)因为数组分配是非法的)。
C#中有稳定的线性代数(更具体地说,向量,matrix,multidimensional array和基本操作)吗? search产生了一些开源的库,这些库或者是未更新几年,或者处于早期的testing版阶段 – 还有Centerspace NMath。 哪些替代方法值得检查?
我正在寻找C语言的所有语法和内置函数的文档,但是我找不到任何在线的站点,这似乎是标准C知识的最终官方来源 。 除了Kernighan和Ritchie这本着名的书以外,是不是有在线C规范? 也许有,我不知道如何find它。 或者,也许问题是,我不完全知道我在找什么。
你如何添加linux可执行文件到.gitignore而不给它们一个明确的扩展名,也不要把它们放在特定的/ bin目录中? 大多数的命名与C编译时没有“.c”扩展名。