草庐IT

C++ 指向函数返回时超出范围的对象的指针 - 为什么这样做有效?

这两个对get_string和get_string2的调用都会返回在函数返回时超出范围的对象。返回的对象不应该是函数返回后超出范围的内存地址吗?这是使用VisualStudio2008。这应该始终有效吗?为什么?#includeenummyID{SMALL,MEDIUM,LARGE};constchar*get_string(myIDid){switch(id){caseSMALL:return"small";caseMEDIUM:return"medium";caseLARGE:return"large";default:return"unknown";}}constchar*get

电脑ip地址怎么设置?4个有效设置方法请收好!

“我电脑的IP地址设置好像不太正确,我想问问电脑的IP地址应该怎么设置呢?希望大家帮帮我!”在互联网时代,IP地址是每台电脑在互联网中的唯一标识。合理设置电脑的IP地址,可以更好地管理网络连接和资源。电脑IP地址怎么设置?本文将简单给大家分享几种设置方式。有需要的用户可以继续往下看啦!方法一:手动设置IP地址电脑IP在哪里改?如果想要更改电脑IP,用户可以手动设置IP。操作如下。步骤1:打开电脑,按下【Win】键和【R】键,打开【运行】窗口;步骤2:在运行窗口中输入【ncpa.cpl】,然后点击【确定】;步骤3:打开网络连接页面,右键单击您想要设置IP地址的网络连接,选择【属性】;步骤4:选择

c++ - 将 auto_ptr 传递给函数可以有效地使其成为接收器。为什么?

我正在阅读一些关于共享指针的笔记。他们说STL对auto_ptr的第一次尝试有以下主要缺点:不能在STL容器中使用复制auto_ptr转移所有权将auto_ptr传递给函数有效地使其成为接收器我理解前两个,但不确定最后一个是什么意思。谁能解释一下。谢谢。 最佳答案 这是因为一旦将auto_ptr复制到一个变量中,您就失去了指向新变量的指针的所有权。当你有:voidfoo(std::auto_ptrx);并且您使用auto_ptr调用foo,您为foo复制了一份auto_ptr采用。这有效地将所有权转移到foo,因此指针在foo完成后

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

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

c++ - 为什么我的 strCopy 实现有效?

这里是strCopy的一个实现voidstrcopy2(char*dst,charconst*src){while((*dst++=*src++));}我们的教授要求我们在不使用指针的情况下重现这段代码,所以我想出了以下函数:voidstrcopy(chardst[],charconstsrc[]){size_ti=0;while(dst[i]=src[i++]);}它运行良好,但我意识到,在引擎盖下函数必须仍然使用指针,因为我们无处返回任何值。换句话说,我虽然最后一个函数会使用按值传递,但显然不是这样。那么在水下发生了什么,这两种方法实际上有什么区别吗?

C++删除没有括号的数组内存仍然有效吗?

这个问题在这里已经有了答案:Isdelete[]equaltodelete?(6个答案)howtoproperlydeleteapointertoarray(6个答案)HowdoIusearraysinC++?(5个答案)dynamicallyallocatedstringarraysfailedtobedeallocated(2个答案)关闭9年前。int*arr=newint[count];deletearr;为什么会这样?我已经检查过,它实际上释放了内存。根据我的阅读,我需要delete[]arr;否则它实际上不会释放所有内存。

c++ - 在迭代时从集合中删除的最有效方法

在遍历集合时从集合中删除的最有效方法是什么?这是我想到的两种方法,它们之间最好的是什么?还有其他更好的方法吗?voidWaitForFiles(std::setfiles){while(files.size()>0){std::setfound_files;for(constauto&file:files){if(Exists(file)){found_files.insert(file);}}for(constauto&found_file:found_files){files.erase(file);}}}使用set_difference:voidWaitForFiles(std:

C++:int x[+30] 是有效的声明吗?

这几天一直在研究数组。我以这种方式遇到了一个数组的声明和它的元素的初始化:intx[+30];x[+1]=0;这让我有点困惑。我有一个想法,当我们写的时候:x[n]=0;那么它的意思是:*(x+n)=0;然后写x[+1]将意味着*(x++1)这似乎是无效的。请纠正我在理解这个概念时所犯的错误。 最佳答案 x[n]表示*((x)+(n))(注意黑色)和x[+1]表示*((x)+(+1))。这是有效的。N33375.2.1订阅TheexpressionE1[E2]isidentical(bydefinition)to*((E1)+(E2

c++ - 构造函数上的 SFINAE 在 VC2017 中有效,但在 clang/gcc 中无效

这个问题在这里已经有了答案:std::enable_iftoconditionallycompileamemberfunction(8个答案)关闭4年前。#includetemplatestructS{template>S(){}template>S(int){}};Ss{};//errorinclang/gcc,OKinVC2017Ss{0};//errorinclang/gcc,OKinVC2017在这两种情况下,clang/gcc都尝试实例化由于SFINAE实际上应该丢弃的ctor。错误信息是:error:notypenamed'type'in'std::enable_if';'

c++ - 为什么这个 c++ 有效? (具有相同名称的变量)

好吧,我想知道为什么这段代码有效,我刚刚意识到我在同一范围内有两个同名的变量。我正在使用g++(gcc4.4)。for(intk=0;k 最佳答案 内部for循环中的k隐藏(或隐藏)外部for循环中的k。您可以在不同范围内声明多个具有相同名称的变量。一个非常简单的例子如下:intmain(){inta;//'a'referstotheintuntilitisshadowedoritsblockends{floata;//'a'referstothefloatuntiltheendofthisblock}//'a'nowreferst