Tag: C#的

调用GCC为“cc”与“gcc”

我知道,在大多数GNU / Linux系统上,GCC可以通过命令行(而不是“gcc”)命名为“cc”。 海湾合作委员会的行为是否与其他方式有所不同? 例如,我知道通过名称“g ++”而不是“gcc”来调用GCC会导致GCC的行为不同(在C ++标准库中将.c文件视为C ++源代码和链接)。 “gcc”和“cc”之间的行为有没有类似的区别? 编辑:到目前为止收到的答案都没有给出明确的 “是”或“否”,以确定GCC是否会以一种方式相对于另一种方式行为不同。 然而,潜入源头检查其行为的想法使我走上了这条道路。 根据我在那里find的,我现在相信答案是: GCC的行为是一样的,不pipe它是通过“gcc”还是“cc”来调用 。

在HttpClient中等待的asynchronous调用永远不会返回

我正在Win8 CP上的基于xaml的C# metro应用程序中调用; 这个调用只是命中一个Web服务并返回JSON数据。 HttpMessageHandler handler = new HttpClientHandler(); HttpClient httpClient = new HttpClient(handler); httpClient.BaseAddress = new Uri("http://192.168.1.101/api/"); var result = await httpClient.GetStreamAsync("weeklyplan"); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(WeeklyPlanData[])); return (WeeklyPlanData[])ser.ReadObject(result); 它挂在await但http调用实际上几乎立即返回(通过小提琴确认); 就好像await被忽略了,只是挂在那里。 在您询问之前 – 是 – 专用networkingfunction打开。 任何想法,为什么这会挂?

我应该停止对抗Visual Studio的默认命名空间命名约定?

我正在开发一个MVVM项目,所以我的项目中有像Models,ViewModels,Windows等文件夹。每当我创build一个新类时,Visual Studio都会自动将文件夹名称添加到名称空间中,而不是只保留项目 – 级别的命名空间。 所以,向ViewModels文件夹添加一个新的类将导致命名空间MyProject.ViewModels而不仅仅是MyProject 。 当我第一次遇到这个时,它使我烦恼。 我的类名非常清晰,有时甚至包含文件夹的名称(例如, ContactViewModel )。 我很快发现自己手动删除名称空间上的文件夹名称。 我什至试图创build一个自定义的类模板(见这个问题 ),但我不能得到这个工作,所以继续手动做。 但是,我开始怀疑,如果这个惯例存在,我只是没有看到一个很好的理由。 如果由于某种原因,有许多相同的类名被组织到文件夹中,我可以看到它是有用的,但这似乎并不是特别常见的情况。 问题: 为什么命名空间名称的公共约定反映文件夹结构? 你遵守这个惯例吗? 为什么?

generics类的静态成员是否与特定实例绑定?

这更像是一个文档,而不是一个真正的问题。 这似乎还没有在SO上解决(除非我错过了),所以在这里: 设想一个包含静态成员的generics类: class Foo<T> { public static int member; } 是否有每个特定类的成员的新实例,或者是否只有一个Foo-type类的实例? 它可以很容易地被这样的代码validation: Foo<int>.member = 1; Foo<string>.member = 2; Console.WriteLine (Foo<int>.member); 结果是什么,这种行为在哪里logging?

为什么C ++语言devise师不断重复使用关键字?

支持重新使用短关键字(并添加上下文相关的含义)的主要论点是什么,而不是仅仅添加更多的关键字? 难道你只是想避免破坏现有的可能已经使用了新的关键字的代码,还是有更深的原因? C ++ 11中新的“枚举类”让我思考这个问题,但这是一个通用的语言devise问题。

从字节数组中读取C#中的C / C ++数据结构

从数据来自C / C ++结构的byte []数组填充C#结构的最佳方法是什么? C结构看起来像这样(我的C是非常生锈的): typedef OldStuff { CHAR Name[8]; UInt32 User; CHAR Location[8]; UInt32 TimeStamp; UInt32 Sequence; CHAR Tracking[16]; CHAR Filler[12]; } 并会填写这样的东西: [StructLayout(LayoutKind.Explicit, Size = 56, Pack = 1)] public struct NewStuff { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] [FieldOffset(0)] public string Name; [MarshalAs(UnmanagedType.U4)] [FieldOffset(8)] public uint User; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] [FieldOffset(12)] public […]

为什么同一类的对象可以访问对方的私有数据?

为什么同一类的对象可以访问对方的私有数据? class TrivialClass { public: TrivialClass(const std::string& data) : mData(data) {}; const std::string& getData(const TrivialClass& rhs) const { return rhs.mData; }; private: std::string mData; }; int main() { TrivialClass a("fish"); TrivialClass b("heads"); std::cout << "b via a = " << a.getData(b) << std::endl; return 0; } 此代码有效。 对象a完全可以从对象b访问私有数据并返回它。 为什么要这样呢? 我会认为私人数据是私人的。 (我开始试图理解pimpl习语中的拷贝构造函数,但是后来我发现我甚至不理解这个简单的情况。)

如何检测到StackOverflowException?

TL; TR 当我提出这个问题时,我认为StackOverflowException是一种防止应用程序无限运行的机制。 这不是真的。 StackOverflowException未被检测到。 当堆栈没有分配更多内存的能力时抛出。 [原始问题:] 这是一个普遍的问题,每种编程语言可能有不同的答案。 我不确定C#以外的语言如何处理堆栈溢出。 我今天遇到exception,并不断思考如何检测到StackOverflowException 。 我相信这是不可能说,如果堆栈是1000电话深,然后抛出exception。 因为也许在某些情况下,正确的逻辑将是那么深。 在我的程序中检测无限循环的逻辑是什么? StackOverflowException类: https://msdn.microsoft.com/de-de/library/system.stackoverflowexception%28v=vs.110%29.aspx 在StackOverflowException类文档中提到的交叉引用: https://msdn.microsoft.com/de-de/library/system.reflection.emit.opcodes.localloc(v=vs.110).aspx 我刚刚添加了stack-overflow标签到这个问题,说明说,当调用堆栈消耗太多的内存时,它正在被抛出。 这是否意味着调用堆栈是我的程序的当前执行位置的某种path,如果它不能存储更多的path信息 ,那么抛出exception?

等价的C ++到Python生成器模式

我有一些Python代码,我需要在C ++中模仿。 我不需要任何特定的解决scheme(比如基于协同例程的良率解决scheme,尽pipe它们也是可以接受的答案),但我只需要以某种方式重现语义。 python 这是一个基本的序列生成器,显然太大而不能存储物化版本。 def pair_sequence(): for i in range(2**32): for j in range(2**32): yield (i, j) 目标是维护上面序列的两个实例,并以半锁步迭代它们,但以块为单位。 在下面的示例中, first_pass使用对的序列来初始化缓冲区, second_pass重新生成相同的确切序列并再次处理缓冲区。 def run(): seq1 = pair_sequence() seq2 = pair_sequence() buffer = [0] * 1000 first_pass(seq1, buffer) second_pass(seq2, buffer) … repeat … C ++ 在C ++中我唯一可以find的解决scheme是用C ++协程来模仿yield ,但是我没有find关于如何做这个的好的参考。 我也对这个问题的替代(非一般)解决scheme感兴趣。 我没有足够的内存预算来保留传递之间的序列副本。

向下广播shared_ptr <Base>到shared_ptr <Derived>?

更新:本示例中的shared_ptr与Boost中的shared_ptr类似,但不支持shared_polymorphic_downcast(或者dynamic_pointer_cast或static_pointer_cast)。 我试图初始化一个派生类的共享指针,而不会丢失引用计数: struct Base { }; struct Derived : public Base { }; shared_ptr<Base> base(new Base()); shared_ptr<Derived> derived; // error: invalid conversion from 'Base* const' to 'Derived*' derived = base; 到现在为止还挺好。 我没有想到C ++隐式地将Base *转换为Derived *。 但是,我确实需要代码表示的function(即在向下转换基指针时保持引用计数)。 我的第一个想法是在Base中提供一个演员操作符,这样就可以隐式转换为Derived(对于书呆子,我会检查演员是否有效,不用担心): struct Base { operator Derived* (); } // … Base::operator Derived* () { return down_cast<Derived*>(this); } 那么,它没有帮助。 编译器似乎完全忽略了我的types转换运算符。 […]