草庐IT

应不应该

全部标签

c++ - 我们应该如何实现 std::error_code 兼容的 API?

假设我们正在编写一个库,并且我们希望提供对错误和异常的细粒度控制:voidfoo();voidfoo(std::error_code&);我们是否可以将foo()实现为抛出std::system_error并让foo(std::error_code&)捕获所有异常并提取error_code。或者我们是否应该将foo(std::error_code&)实现为永不抛出函数并根据错误代码的存在在foo()中抛出一个函数? 最佳答案 boost库适用于异常和boost::system::error_code,因此,我认为您可以定位于此库。例

c++ - 我应该将我的派生类析构函数标记为虚拟/覆盖吗?

C++核心指南包含followingadvice关于virtual、override和final说明符,特别是与派生类析构函数有关:Ifabaseclassdestructorisdeclaredvirtual,oneshouldavoiddeclaringderivedclassdestructorsvirtualoroverride.Somecodebaseandtoolsmightinsistonoverridefordestructors,butthatisnottherecommendationoftheseguidelines.果然,clang-tidy是那些违反推荐的工具

c++ - 默认函数参数值在模板中可见但不应该 (gcc)

考虑下面的代码:#includevoidf(int,int);voidg(int,int);structfunctor{templatevoidoperator()(T&&...params){returnf(std::forward(params)...);}};intmain(){functor()(1);//canusethedefaultvaluehere,why?!//g(1);//errorhereasexpected,toofewarguments}voidf(inta,intb=42){}voidg(inta,intb=24){}这是一个围绕函数调用的薄包装。但是,在f

c++ - 我的 API 函数应该采用 shared_ptr 还是 weak_ptr

我目前正在设计一个API,我不确定我的函数是否应该采用shared_ptr或weak_ptr.有包含查看器的小部件。观众有一个功能add_painter这给观众增加了一个画家。当查看器需要重新绘制时,它会使用其绘制器绘制到缓冲区中并显示结果。我得出的结论是观众应该使用weak_ptr捕获画家:一个画家可能被多个观众使用,所以观众不能拥有画家。删除画家应该将其从查看器中删除。这样,用户就不需要记住他们必须调用remove_painter。功能。可能有不同类型的查看器,因此它们隐藏在界面后面。什么签名最适合add_painter界面中的功能?我应该直接使用voidadd_painter(w

c++ - 我应该将哪个C++库用于利用第三方应用程序的大型并行计算数字处理项目

简介我想在一个新的编程项目上寻求很多建议,我将自己开始。我将非常精确地完成我想完成的工作以及我的基本要求。因此,这将是一个漫长的问题。请多多包涵。我将把问题分为五个部分:实际问题模拟问题要求和首选项附加信息建议请求列表1.实际问题摩天大楼和大型桥梁承受着动态风荷载。这意味着,如果设计不当,它们可能会因风振而折叠(这实际上发生在1940年:http://www.youtube.com/watch?v=3mclp9QmCGs)。为了正确设计这种结构,需要有效的数字运算软件来进行分析和模拟。2.模拟问题存在众多能够模拟流体流动或结构力学的软件。许多已经开发了30多年,并且它们都是成熟可靠的技

不应使用 c++ 有向字母 (MISRA C++ 2-5-1)

根据MISRAC++2-5-1我们通常应该避免弄乱有向字母。虽然,我不明白为什么我们也应该避免使用可读词and、or、not等来定义常用运算符&&,||,...该问题甚至被突出显示为Sonar/MISRA的“主要”问题:[Major]OpenReplacethisdigraph'and'byitsequivalent'&&'[Major]OpenReplacethisdigraph'and'byitsequivalent'&&'[Major]OpenReplacethisdigraph'or'byitsequivalent'||'[Major]OpenReplacethisdigrap

c++ - 我应该返回 gsl::span<const T> 而不是 const std::vector<T>&

我有一个带有std::vector成员的类和一个返回对该vector的const引用的成员函数。classdemo{public://...conststd::vector&test()const{returniv;}private:std::vectoriv;};我计划将成员类型更改为不同的数组,如具有足够功能和较小内存占用的容器类型(例如std::experimental::dynarray、std::unique_ptr)。因此,我认为最好不要将真正的容器作为const引用返回,而是将View作为gsl::span返回给元素。classdemo{public://...gsl::

NRVO是否应该保证本地命名变量和呼叫站点变量进行相同的地址?

我认为应该这样做,因为这对于正确性很重要。但是,我很惊讶地看到Clang的输出。考虑以下代码:#includestructS{inti;S(inti):i(i){}S(S&&){std::cout我们为MOVECTOR定义了S检查是否S(S&&)被称为(如果不是的话),则应用NRVO。我们从GCC中看到的结果是:0x7ffc3ed7b5ac0x7ffc3ed7b5ac42使用NRVO,并采用相同的地址,这是预期的。但是,Clang的输出:0x7fff908bbcc80x7fff908bbcf842应用NRVO,但地址有所不同。如果您想知道为什么拥有相同的地址很重要-这是因为某些对象可能会在施工

c++ - 每个 C++ 开发人员都应该了解的有关链接的知识

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。问题关于链接如何工作的详细信息很少。此外,IDE隐藏了编译的细节,当您的项目出现一些与链接相关的问题时,这将是一个真正的痛苦。通常C++书籍告诉我C++code-->preprocessedc++code-->objectcode但是,尽管链接错误很常见,但他们确实没有详细说明普通开发人员应该了解的有关链接的知识。新手C++程序员应该如何知道如何处理如下所示的错误?XmlRpcSocket.o:

c++ - 应该如何使用 const/non-const 参数重载函数?

我有以下代码://stringspecializationsvoidfoo(constchar*a,constchar*b);voidfoo(constchar*a,conststd::string&b);voidfoo(conststd::string&a,constchar*b);voidfoo(conststd::string&a,conststd::string&b);//genericimplementationtemplatevoidfoo(TAa,TAb){...}问题是这个测试用例:chartest[]="test";foo("test",test);最终调用了foo的