Tag: C#的

在一个getter函数中返回一个const引用或一个副本?

默认情况下 ,从getter函数返回副本(1)或引用(2)会更好吗? class foo { public: std::string str () { // (1) return str_; } const std::string& str () { // (2) return str_; } private: std::string str_; }; 我知道2)可能会更快,但不必由于(N)RVO。 1)对于悬挂引用是比较安全的,但是对象可能会死亡或者引用永远不会被存储。 当你写一个class级的时候,你的默认设置是什么,而且还不知道性能和生命期问题是否重要? 额外的问题:当成员不是一个普通的string,而是一个vector时,游戏是否会改变?

DateTime.Now.Ticks如何正确工作?

在我的应用程序中,我随机生成文件。 为了确保一个独特的命名,我试图使用自1970年1月1日以来的纳秒: long time = DateTime.Now.Ticks; String fileName = Convert.ToString(time); Console.WriteLine(fileName); 现在我看到一些奇怪的东西。 为什么这样的输出? 我的意思是为什么最后4个数字总是一样的? 我可以使用这个作为文件名,这不是问题,但我只是想知道。 634292263478068039 634292263512888039 634292263541368039 634292263603448039 634292263680078039

关于只使用头标的c ++库的量化指标(基准)

我试图find这个使用SO的答案。 有很多问题列出了在c ++中构build一个仅包含头文件的库的各种利弊,但是我还没有能够find一个可以量化的文件。 那么,以可量化的术语来说,使用传统分离的c ++头文件和实现文件与头文件仅有区别? 为了简单起见,我假设不使用模板(因为它们仅需要标题)。 详细说明一下,我列举了我从文章中看到的利弊。 显然,有些是不容易量化的(如易用性),因此无法进行量化比较。 我会标记那些我期望可以量化的指标(可量化的)。 优于头只 包含更容易,因为您不需要在构build系统中指定链接器选项。 因为库的函数在你的代码中被内联,所以你总是使用与其他代码相同的编译器(选项)来编译所有的库代码。 这可能会快很多。 (定量的) 可以给编译器/链接器提供更好的优化机会(如果可能的话,解释/量化) 如果您使用模板,则是必需的。 缺点仅用于标题 它膨胀了代码。 (可量化的)(如何影响执行时间和内存占用) 更长的编译时间。 (定量的) 界面和执行的分离失去。 有时会导致难以解决的循环依赖。 防止共享库/ DLL的二进制兼容性。 这可能会加剧那些喜欢使用C ++的传统方式的同事。 任何你可以从更大的开源项目中使用的例子(比较相似大小的代码库)都会非常感激。 或者,如果您知道可以在标题和分隔版本之间切换的项目(使用包含两者的第三个文件),那么这将是理想的。 轶事数字也是有用的,因为他们给我一个球场,我可以得到一些见解。 利弊来源: https://stackoverflow.com/a/6200793/278976 https://stackoverflow.com/a/1783905/278976 提前致谢… 更新: 对于任何可能稍后阅读并有兴趣获得关于链接和编译的背景信息的人,我发现这些资源是有用的: http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/0136108040第7章 http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html http://www.cyberciti.biz/tips/linux-shared-library-management.html 更新:(回应下面的评论) 只是因为答案可能会有所不同,并不意味着测量是无用的。 你必须开始测量某个点。 而你有更多的测量,图片更清晰。 我在这个问题上要求的不是全部,而是一幅画面。 当然,任何人都可以用数字来歪曲论点,如果他们想不道德地推动他们的偏见。 但是,如果有人对两种select之间的差异感到好奇,并公布这些结果,我认为这些信息是有用的。 没有人对这个话题感到好奇,足以衡量它吗? 我喜欢这个枪战项目。 我们可以从删除大部分variables开始。 在一个版本的linux上只能使用一个版本的gcc。 只对所有基准使用相同的硬件。 不要用多个线程编译。 那么,我们可以衡量: 可执行大小 运行 […]

你如何协调普通的C ++命名约定和库的命名约定

大多数C ++命名约定规定使用camelCaseIdentifiers :以类( Person , Booking )的大写字母开头的名称和以字母和variables( getPrice() , isValid() , largestValue )的小写字母开头的名称。 这些build议与C ++库的命名约定完全不一致,它们涉及类( string , set , map , fstream )的小写名称和方法和字段( find_first_of , lower_bound , reverse_iterator , first_type )的first_type 。 使图片更加复杂的是操作系统和C库函数,它们涉及在C和Unix中压缩的小写字母名称,以及在Windows中以大写字母开头的函数。 因此,我的代码是一团糟,因为一些标识符使用C ++库,C或操作系统命名约定,而其他标识符使用规定的C ++约定。 编写包装库function的类或方法是很痛苦的,因为类似的东西会以不同风格的名字结尾。 那么,你如何调和这些不同的命名约定呢?

有没有办法使用reflection设置结构实例的属性?

我试图写一些代码,在结构上设置一个属性(重要的是它是一个结构上的属性),它是失败的: System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(); PropertyInfo propertyInfo = typeof(System.Drawing.Rectangle).GetProperty("Height"); propertyInfo.SetValue(rectangle, 5, null); 高度值(由debugging器报告)永远不会被设置为任何值 – 它保持默认值0。 之前我已经做了大量的关于类的反思,而且这个工作正常。 另外,我知道在处理结构时,如果设置一个字段,则需要使用FieldInfo.SetValueDirect,但是我不知道PropertyInfo的等价物。

如何build立与C ++ 0x支持的Boost?

我不知道如何用C ++ 0x编译器来构buildBoost。 必须给bjam哪个选项? 应该修改user.config文件吗?有人可以帮助我吗? 最好的,维森特

什么是WebResource.axd?

我有麻烦Web和WebResource.axd麻烦。 什么是WebResource.axd?

C错误:未定义的函数引用,但它被定义

只是一个简单的程序,但我不断收到这个编译器错误。 我正在使用MinGW编译器。 这是头文件point.h : //type for a Cartesian point typedef struct { double x; double y; } Point; Point create(double x, double y); Point midpoint(Point p, Point q); 这里是point.c : //This is the implementation of the point type #include "point.h" int main() { return 0; } Point create(double x, double y) { Point p; px […]

为什么C#编译器生成单个类来捕获多个lambdas的variables?

假设我们有这样的代码: public class Observer { public event EventHandler X = delegate { }; } public class Receiver { public void Method(object o) {} } public class Program { public static void DoSomething(object a, object b, Observer observer, Receiver r) { var rCopy = r; EventHandler action1 = (s, e) => rCopy.Method(a); EventHandler action2 = (s, […]

macros可以通过参数的数量来重载吗?

这是如何工作的? 一个C99 / C ++ 11可变参数macros如何实现扩展到不同的事物,仅仅有多less个论点?