草庐IT

应不应该

全部标签

c++ - 显式初始化 std::optional 时,我应该使用 nullopt 吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion安std::optional可以像这样初始化为脱离状态:std::optionaloi{nullopt};但也像这样:std::optionaloi{};赋值也是如此(oi={}或oi=nullopt)。除了个人喜好/美感之外,这两者之间是否存在差异,使我更喜欢其中之一?还是根本不重要?注意:我问的是我想显式初始化可选的情况,而不是默认初始化它(例如为了强调)。

c++ - 我应该返回一个迭代器还是一个指向 STL 容器中元素的指针?

我正在开发一个用于将现有代码移植到不同平台的引擎。现有代码是使用第三方API开发的,我的引擎将根据我的新平台重新定义这些第三方API函数。以下定义来自API:typedefunsignedlongshape_handle;shape_handlemake_new_shape(inttype);我需要重新定义make_new_shape并且我可以选择重新定义shape_handle。我已经定义了这个结构(简化):structShape{inttype};make_new_shape的调用者不关心Shape的底层结构,它只需要一个“句柄”,这样它就可以调用如下函数:void`set_sha

c++ - 一个 C++ 类函数应该以 } 结尾吗?或者只有一个}?

关于C++语法的基本问题。C++函数应该以;结尾吗?还是没关系?或者这两个例子有什么区别?有结局;voidTest::print(){...};没有;voidTest::print(){...}我见过有和没有的C++代码,但我不明白其中的区别。/谢谢更新:在这种情况下;应该避免,因为它没有做任何有用的事情,甚至可能在将来成为一个问题。 最佳答案 在类主体之外(其中函数定义可以选择性地后跟单个;),函数定义由复合语句结束-这是结束}。在命名空间范围内,函数定义的右大括号之后的下一个标记必须构成下一个声明的一部分。在C++03中,没有e

c++ - 我应该如何为 c 字符串 char 数组分配内存?

因此,在尝试学习如何在C++中使用C字符串时,我遇到了内存分配问题。这里的想法是创建一个格式为(s1+sep+s2)的新字符串我使用的文本提供了标题,所以我无法更改它,但我在尝试设置charstr[]的大小时遇到​​了问题。我收到一条错误消息,指出sLength不是常量,因此不能用于设置数组的大小。我对C++比较陌生,所以这是一个由两部分组成的问题。这个策略实际上是在为新数组分配内存吗?如果无法使用strlen(char*)获取常量值,如何正确设置数组大小?char*concatStrings(char*s1,char*s2,charsep){intsLength=strlen(s1)

c++ - 我们应该在 C++ 中使用 exit 吗?

根据C++引用exitterminatestheprocessnormally,performingtheregularcleanupforterminatingprograms.Normalprogramterminationperformsthefollowing(inthesameorder):Objectsassociatedwiththecurrentthreadwiththreadstoragedurationaredestroyed(C++11only).Objectswithstaticstoragedurationaredestroyed(C++)andfunctio

c++ - 我应该在频繁使用的功能上使用 `inline` 吗?

我有一个cnVector类,它表示3维空间中的一个点。它的运算符+-*/被密集使用。他们的实现非常简短:cnVectorcnVector::operator+(constcnVector&v)const{returncnVector(x+v.x,y+v.y,z+v.z);}我的问题是,因为这个函数很短,虽然它被大量使用,但我是否应该内联它?还是在那么使用它时会生成太多代码? 最佳答案 是的,您可能应该这样做。c++中inline关键字的良好用例是:小函数,大量使用。另见http://msdn.microsoft.com/en-us/

c++ - 使用 IOCP 时,我应该将 WSAOVERLAPPED 的 hEvent 设置为 NULL 还是 WSAEVENT 对象的有效句柄?

根据MSDN:hEvent:IfanoverlappedI/OoperationisissuedwithoutanI/Ocompletionroutine(theoperation'slpCompletionRoutineparameterissettonull),thenthisparametershouldeithercontainavalidhandletoaWSAEVENTobjectorbenull.当我使用IOCP时,当我调用WSASend()或WSARecv()时,我将NULL传递给它们的最后一个参数(即lpCompletionRoutine):WSASend(pIoRe

c++ - 我们应该将 COM 中的 BSTR 类型视为值还是引用?

从ATLInternals一书中,我知道BSTR不同于OLECHAR*,BSTR有CComBSTR和CString。根据MSDNAllocatingandReleasingMemoryforaBSTR,我知道调用者/被调用者的内存管理责任。从MSDN中获取这一行,HRESULTCMyWebBrowser::put_StatusText(BSTRbstr)我仍然不知道如何在我的实现中正确处理bstr。因为我仍然有一个关于BSTR的基本问题——我们应该将bstr视为一个值(如int)还是一个引用(如int*),至少在COM接口(interface)边界上。我想在我的实现中尽快将BSTR转换

MySQL应该花这么长时间,还是配置错误?

我是第一次使用MySQL,并惊讶于与SQLServerExpress相比,基本查询完成的时间需要多长时间。在数据库方面,我是新手,因此希望我能在语法或配置中更改一些基本内容以使其“工作”。我正在使用MySQL5.7,Workbench6.3。服务器/客户端在同一本机器上,只有1个用户(root)。举这个例子。我有一个简单的表:CREATETABLEoriginal_table(myTimeStampdatetime,PRIMARYKEY(`myTimeStamp`));为了娱乐,我以2009年至2017年的一分钟间隔=420万张记录,以一分钟的时间间隔填写了桌子。现在,简单地将该表复制到另一个

c++ - 当整数变量不能保存它不应该保存的值时,是否在 C++ 中的运行时捕获了 overflow_error

我正在学习C++,我试图编写这个函数来找到可以适合整数类型的最大斐波那契整数:voidfindFibThatFitsInAnInt(){intn1=1;intn2=1;intfib=0;try{while(true){fib=n1+n2;n1=n2;n2=fib;cout但问题是overflow_error根本没有被捕获。我知道这样做的其他方法:我知道我可以这样写:while(fib>=0){fib=n1+n2;n1=n2;n2=fib;cout并且因为fib只是一个“int”而不是一个unsignedint,所以当它被分配一个大于int类型容量的值时,它最终会变成问题是:在C++中是