Questions tagged «c++»

有关C ++的问题,C ++是一种静态类型,自由格式,多范式,已编译的通用编程语言。

5
有没有办法将gcc用作库?
任何人都知道这样的解决方案: #include <stdio.h> #include <gcc.h> /* This .h is what I'm looking for. */ int main (void) { /* variables declaration (...) */ /* The following line is supposed to be equivalent to: * $ gcc main.c -o main */ results = gcc_compile_and_link("main.c", "main"); /* Now I want to use …
10 c++  c  gcc 

3
依靠隐式参数转换是否被认为是危险的?
C ++具有一项功能(我无法弄清楚它的正确名称),如果参数类型不是期望的参数类型,它将自动调用参数类型的匹配构造函数。 一个非常基本的示例就是调用一个std::string带const char*参数的函数。编译器将自动生成代码以调用适当的std::string构造函数。 我想知道,它是否像我认为的那样对可读性不利? 这是一个例子: class Texture { public: Texture(const std::string& imageFile); }; class Renderer { public: void Draw(const Texture& texture); }; Renderer renderer; std::string path = "foo.png"; renderer.Draw(path); 这样好吗 还是太过分了?如果我不应该这样做,我可以以某种方式让Clang或GCC发出警告吗?

4
使用C ++和MySQL构建Web应用程序是否存在任何概念上的弊端?
我继承了一个非常有趣的项目,在这里有一个很好的机会将现有软件移植到SaaS Web应用程序中。随着项目的继承,代码库/框架已经定义为C ++和MySQL。该应用程序本身已编译并在Windows Server上作为EXE运行。UI是基于Web的,该应用程序可作为一种服务器使用。根据我对现代Web应用程序的了解,这也许是一个不寻常的选择。如今,大多数人似乎选择使用PHP框架或Ruby on Rails。当然,这是我从阅读有关该主题的博客中获得的印象。因此,我非常想知道MySQL支持的C ++ EXE是否是Web应用程序的坚实基础,还是我们是否应该以其他方式构建?

4
什么是表示两个类之间多对多关系的好方法?
假设我有两个对象类型,A和B。它们之间的关系是多对多的,但是它们都不是另一个的所有者。 A和B实例都需要知道连接。这不只是一种方法。 因此,我们可以这样做: class A { ... private: std::vector<B *> Bs; } class B { private: std::vector<A *> As; } 我的问题是:我将函数放在哪里创建和销毁连接? 应该是A :: Attach(B),然后更新A :: Bs和B :: As向量吗? 或者应该是B :: Attach(A),这似乎同样合理。 这些都不对。如果我停止使用代码,并在一周后返回,我确定我将无法回忆起是否应该执行A.Attach(B)或B.Attach(A)。 也许应该是这样的函数: CreateConnection(A, B); 但是创建全局函数似乎也不可取,因为它是专门用于仅使用类A和B的函数。 另一个问题:如果我经常遇到这个问题/要求,我能以某种方式为它解决问题吗?也许可以从共享此类关系的类中派生或使用的TwoWayConnection类? 有什么好的方法可以处理这种情况...我知道如何很好地处理一对多的“ C拥有D”情况,但是这比较棘手。 编辑:只是为了使其更明确,这个问题不涉及所有权问题。A和B都由其他某个对象Z拥有,并且Z负责所有所有权问题。我只对如何创建/删除A和B之间的多对多链接感兴趣。
10 c++  c++11 

2
如何将50岁以上的文盲计算机引入编程中
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 8年前关闭。 前几天,我父亲问我一个我从未期望过的问题。 “我如何学习C ++?” 我父亲今年已经56岁了,计算机对他来说是一个遥不可及的概念。除了呼叫号码(没有快速拨号或联系人)外,他不知道如何很好地使用电话。尽管他已经开始学习计算机,但他知道如何打开Internet(在Windows中)和浏览(到此为止,他已经完全通过自己的在线网站成功完成了几份工作申请,也为他提供了职位) )。但是,这些都是狭窄的经验,实际上并没有多大意义。 虽然他可能没有背景,但我父亲知道如何阅读。我的意思是阅读是一种技能,而不仅仅是一种能力。他几乎没有大学学历(财务问题,家庭等),并且有幸完成了高中毕业,但仍然自学成才,成为电工大师,至今已经有30年了。他在吉他方面也做同样的事情,学习演奏非常专业的水平,并因其技巧而受到赞誉。在高中时,他拿起了一本举重书-当时是他的高中唯一一位被国家标准正式认可为“运动员”的人。 在所有情况下,他只需要阅读一些内容即可。有东西教他。他像海绵一样吸收信息。 我毫不怀疑我父亲的动机或能力,所以我的总体目标很简单: 让我的父亲进入计算机世界,让他走上编程的道路。 我坚信,一旦我掌握了基础知识,他的干劲和阅读能力将使他继续前进。 所以我问大家:我应该从哪里开始呢?最好的资源是什么?我应该让他启动Linux而不是Windows?C ++是个坏主意吗? 请记住,他需要(IMO)首先学习计算机,然后首先掌握编程知识(“ Hello world”经验)。 出于金钱的缘故,我希望他能阅读免费的在线资源,但无论如何,无论是印刷版还是网上付费的任何好的建议,我们都欢迎(我以后可以考虑购买)。 而且,我打算从C ++开始(没有Python,Java等),因为我最了解C ++,并且将在代码开发过程中为他提供帮助。(我现在几乎没有其他语言的知识)。 编辑:我收到很多使用Python的持久性建议。我想做C ++的唯一原因是我知道它,当我的父亲需要帮助时可以在那里。我第一次接触编程是Java。我学过Java,并且擅长Java。我愿意接受其他建议,但请有效地应用您的建议。 编辑#2:我知道这里可能缺少我的方法/思维/知识。我是大学二年级的CS专业。如果您不同意我的帖子,请告诉我为什么-给我想法,信息-这就是我首先要问的原因。将我的总体目标缩小到可以实现的特定目标。
10 c++ 

5
接口和继承:两全其美?
我“发现”了界面,并开始喜欢它们。接口的优点在于它是一个契约,任何需要履行该契约的对象都可以在需要该接口的任何地方使用。 接口的问题是它不能具有默认实现,这对于平凡的属性是一种痛苦,并且会破坏DRY。这也很好,因为它可以使实现与系统保持分离。一方面,继承会保持更紧密的耦合,并且有可能破坏封装。 案例1(与私有成员的继承,良好的封装,紧密耦合) class Employee { int money_earned; string name; public: void do_work(){money_earned++;}; string get_name(return name;); }; class Nurse : public Employee: { public: void do_work(/*do work. Oops, can't update money_earned. Unaware I have to call superclass' do_work()*/); }; void HireNurse(Nurse *n) { nurse->do_work(); ) 情况2(只是一个接口) class IEmployee { virtual …

5
断言是异常还是错误?
我是一名专业的C程序员,也是一名业余爱好者Obj-C程序员(OS X)。最近,由于语法非常丰富,我很想扩展到C ++。 到目前为止,我对异常的处理还不多。Objective-C有它们,但是苹果公​​司的政策非常严格: 重要说明:您应保留使用编程异常或意外运行时错误(例如,超出范围的集合访问权限,尝试使不可变对象发生突变,发送无效消息以及失去与窗口服务器的连接)的例外情况。 C ++似乎更喜欢使用异常。例如,如果无法打开文件,RAII上的Wikipedia示例将引发异常。Objective-C会return nil因out参数发送错误而导致错误。值得注意的是,似乎std :: ofstream可以设置任何一种方式。 在程序员上我发现了几个答案,要么宣称使用异常代替错误代码,要么根本不使用异常。前者似乎更为普遍。 我还没有发现有人对C ++做过客观的研究。在我看来,由于指针很少使用,因此如果我选择避免异常,则必须使用内部错误标志。它会处理起来太麻烦,还是会比异常情况做得更好?两种情况的比较将是最佳答案。 编辑:虽然不完全相关,但我可能应该澄清一下nil。从技术上讲,它与相同NULL,但事实是,可以向发送消息nil。所以你可以做类似的事情 NSError *err = nil; id obj = [NSFileHandle fileHandleForReadingFromURL:myurl error:&err]; [obj retain]; 即使第一个电话返回nil。而且,就像您*obj在Obj-C中从未做过的那样,没有空指针取消引用的风险。
10 c++  exceptions 

3
观察者模式;知道*什么*改变了吗?
我创建了两个抽象类Subject和Observer,它们定义了经典的Observer模式接口。我从中派生出实现Observer模式的方法。观察者可能看起来像这样: void MyClass::Update(Subject *subject) { if(subject == myService_) { DoSomething(); } else if(subject == myOtherService_) { DoSomethingElse(); } } 很好,它告诉我谁更改了某些内容。但是,它没有告诉我发生了什么变化。有时这是可以的,因为我只是要查询主题以获取最新数据,但是其他时候我需要知道主题上发生了什么变化。我注意到在Java中,它们同时具有notifyObservers()方法和notifyObservers(Object arg)方法,以大概指定有关更改内容的详细信息。 就我而言,我需要知道是否有几个不同的动作中的一个发生在主体上,如果是特定动作,则需要知道与该动作相关的整数。 所以我的问题是: 传递通用参数的C ++方法是什么(就像Java一样)? 观察者甚至是最好的模式吗?也许某种事件系统? 更新 我找到了这篇文章,该文章讨论了如何对观察者模式进行模板化:使用模板实现主题/观察者模式。这让我想知道是否可以模板化参数。 我发现了这个关于模板参数模板化的堆栈溢出问题:基于模板的主题观察者模式-我应该使用static_cast还是dynamic_cast。但是,OP似乎有一个没有人回答的问题。 我可以做的另一件事是将Update方法更改为采用EventArg对象,如下所示: void MyClass::Update(Subject *subject, EventArg arg) { ... 然后为特定的参数数据创建EventArg的子类,然后将其投射回update方法中的特定子类。 更新2 还发现了一篇关于创建基于异步消息的c ++框架的文章;第2部分将具有主题讨论交流有关细节什么改变。 我现在正在认真考虑使用Boost.Signals。简单的时候使用我自己的观察者模式很有意义,但是模板化类型和参数开始变得复杂。我可能需要Boost.Signals2的线程安全性。 更新3 我还发现了一些关于观察者模式的有趣文章: 赫伯·萨特的观察家概论 在C ++中实现观察者模式-第1部分 实施观察者设计模式的经验(第2部分) 实施观察者设计模式的经验(第3部分) 但是,我已将实现切换为使用Boost.Signals,尽管出于我的目的可能有点blo肿,但它可以成功运行。可能有关膨胀或速度的任何问题都是无关紧要的。

5
使用预处理器指令或if(constant)语句是否更好?
假设我们有一个代码库,可用于许多不同的客户,并且其中包含一些仅与类型X的客户相关的代码。最好使用预处理器指令将代码仅包含在类型X的客户中,或者使用if语句?要更清楚: // some code #if TYPE_X_COSTUMER = 1 // do some things #endif // rest of the code 要么 if(TYPE_X_COSTUMER) { // do some things } 我可以考虑的参数是: 预处理程序指令可减少代码占用量并减少分支(在非优化编译器上) 如果语句的结果是始终编译的代码,例如,如果某人犯了一个错误,而该错误将损害与其从事的项目无关的代码,则该错误仍然会出现,并且他不会破坏代码库。否则,他将不会意识到腐败。 经常有人告诉我,比起预处理器,我更喜欢使用处理器(如果这完全是一个论点……) 什么是最好的-在谈论针对许多不同客户的代码库时?
10 c++  c 


4
快速算法,用于搜索排序的浮点数组,以找到将输入值括起来的一对浮点
我有一个浮点数组,从最小到最大排序,并且需要能够选取大于或小于传递的输入值的最近浮点。此输入值不一定要作为数组中的值存在。 天真的方法是对数组进行简单的线性搜索。可能看起来像这样: void FindClosestFloatsInArray( float input, std::vector<float> array, float *min_out, float *max_out ) { assert( input >= array[0] && input < array[ array.size()-1 ] ); for( int i = 1; i < array.size(); i++ ) { if ( array[i] >= input ) { *min = array[i-1]; *max = array[i]; } …
10 c++  algorithms 

8
我对C ++的技术评估有什么期望?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我被要求去进行技术测试/评估,以作为初级开发人员的工作,主要使用C ++。这是我的第一次测试/评估,时间长达2小时。 我的C ++有点生锈,因为我最近一直在用PHP进行项目。 这是一家英国公司,但是我猜对候选人的技术测试到处都差不多。 在这些测试之一中,我应该期待什么?

5
监控C ++应用程序
我们正在实施新的集中监控解决方案(Zenoss)。使用SNMP和JMX可以很容易地将服务器,网络和Java程序整合在一起。 但是,问题是,在大型异构(Solaris x86,RHEL Linux,Windows)环境中监视和管理自定义C ++应用程序的最佳实践是什么? 我看到的可能性是: 网络SNMP 优点 每个服务器上的单个中央守护程序 知名标准 轻松集成到监控解决方案中 我们已经在服务器上运行了Net SNMP守护程序 缺点: 复杂的实现(MIB,Net SNMP库) 为C ++开发人员介绍的新技术 系统日志 优点 每个服务器上的单个中央守护程序 知名标准 未知集成到监视解决方案中(我知道它们可以基于文本发出警报,但是在发送遥测信息(如内存使用率,队列深度,线程容量等)时效果如何? 简单的实现 缺点: 可能的整合问题 C ++开发人员的一些新技术 如果我们切换监视供应商,可能会出现移植问题 可能涉及提出临时通信协议(或使用RFC5424结构化数据;我不知道Zenoss是否在没有自定义Zenpack编码的情况下支持该协议) 嵌入式JMX(嵌入JVM并使用JNI) 优点 Java和C ++的一致管理接口 知名标准 轻松集成到监控解决方案中 有点简单的实现(我们今天已经出于其他目的执行了此操作) 缺点: 复杂性(JNI,本机C ++和Java之间的转换层,基本上编写两次管理代码) 可能的稳定性问题 在每个进程中都需要一个JVM,使用更多的内存 JMX是C ++开发人员的新技术 每个进程都有自己的JMX端口(我们在每台计算机上运行很多进程) 本地JMX守护程序,进程连接到它 优点 每个服务器上的单个中央守护程序 Java和C ++的一致管理接口 …
10 java  c++ 

2
元编程
我刚刚开始作为C ++开发人员的旅程,并且最近我正在研究一个称为元编程的主题。到目前为止,我已经阅读了很多有关该主题的信息,并且没有几个问题。 反射在c ++中的用法:可能吗?根据我的理解,反射是一种元编程技术,它具有操纵程序状态的能力,其操纵可以是内省的或内省的。 反射架构和元级别架构有什么区别?元编程体系结构属于哪一类? 元编程分为两个级别:元级别和基础级别。在我的理解中,被调查的目标程序或系统是基础级别,而将在被调查的系统上运行的元程序是元级别。我对么? 还通过提供一些有关在C ++中进行模板元编程的准则来帮助我。 您可以为我推荐一些可行的示例,让我亲自尝试一下这种编程技术吗?
10 c++ 

5
学习编程时面向未来的自我[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 3年前关闭。 如果您愿意,我想以“面向未来”的方式学习编程。尽管Windows主导了台式机操作系统市场(目前而言),但显然在学习其语言/框架/ API方面还是有很多价值的,依此类推-随着新设备的出现或Windows自身的发展,这种情况可能会发生变化。友好的Windows 8预览看起来不太吸引人...)。 我是否正确地认为,对于后端逻辑/低级编程等具有扎实的C / C ++知识,再结合用于Java的Java等极易移植的语言,将是软件开发的良好基础在大多数系统上将证明有用吗?-我说的是台式PC,平板电脑,电话。
10 java  c++  c  portability 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.