草庐IT

c++ - 如何引用与 C++ 中的局部变量同名的全局变量?

如果有一个全局变量并且函数有一个同名参数,并且期望的结果是局部变量和全局变量的总和,那么在这种特定情况下我们如何引用全局函数?我知道这样做不是个好主意。但只是出于好奇。intfoo=100;intbar(intfoo){intsum=foo+foo;//sumaddslocalvariableandaglobalvariablereturnsum;}intmain(){intresult=bar(12);return0;} 最佳答案 目前最好的选择是重命名函数参数,使其不与全局变量冲突,因此无需规避。假设重命名选项NotAccept

C++ for循环变量的生命周期很奇怪

for(inti=0;i代码的输出是123456789。我想知道为什么在执行变量声明时for循环中的变量n没有被初始化。 最佳答案 您永远不会将n初始化为特定值。当您调用intn时,C++默认不会执行此操作。相反,它只是保留一个整数大小的内存块。因此,当您调用n++时,程序只是获取该内存中恰好存在的任何值并递增它。由于您是快速连续地执行此操作而不是在其间创建新变量,因此它恰好一遍又一遍地获取相同的内存。正如@NicolasBuquet指出的那样,编译器优化也可能与选择相同内存块的一致性有关。如果您要为n分配一个值(即intn=1;)

c++ - 作用域和 C++ 指针

我有以下代码:usingnamespacestd;vectorv;{strings="hello";v.push_back(&s);}{stringss="goodbye";v.push_back(&ss);}coutc_str()c_str()打印goodbyegoodbye如果我删除范围括号,代码将打印hellogoodbye当我离开第一个作用域时究竟发生了什么,指向第一个字符串的指针现在指向第二个? 最佳答案 存储的指针在作用域之后变成悬挂指针,任何读取它们指向的内容的尝试都会产生未定义的行为。

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

c++ - 非法调用非静态成员函数(C++)?

我正在开发一款基于用户控制在屏幕区域之间移动的球的游戏。屏幕的“map”在文件ThreeDCubeGame.cpp中定义:charm_acMapData[MAP_WIDTH][MAP_HEIGHT];ThreeDCubeGame.cpp处理与map有关的大部分内容,但播放器(和键盘输入)由ThreeDCubePlayer.cpp控制。当玩家移动到新的map单元格时,游戏将必须检查该单元格的内容并采取相应的行动。ThreeDCubeGame.cpp中的这个函数是我想要使用的:inlinecharGetMapEntry(intiMapX,intiMapY){returnm_acMapDat

c++ - 令人困惑的 C++ 全局范围问题

我正在参加C++练习测试,我对一组访问范围和声明点相关问题感到困惑。这两个问题都是相互关联的。我知道答案。我需要的是正确的解释:main结束时局部变量x的值是多少intx=5;intmain(intargc,char**argv){intx=x;return0;}回答:未定义main结束时y的值是多少?constintx=5;intmain(intargc,char**argv){intx[x];inty=sizeof(x)/sizeof(int);return0;}答案:5 最佳答案 来自标准:3.3.1[basic.scope.

c++ - 为什么 C++ 参数作用域会影响命名空间内的函数查找?

这对我来说似乎有点倒退,但它有效:#includenamespacenTest{structcTest{};voidfTest(cTest&x){std::cout通常,您需要nTest::才能访问fTest,但它属于nTest的参数似乎将nTest添加到搜索fTest的可能范围列表中。参数范围影响函数查找对我来说似乎很奇怪。这在GCC中编译得很好,但我想知道这种用法是否可移植?这个范围机制的官方定义是什么? 最佳答案 那是ADL(参数相关查找)或KoenigLookup(针对功能的设计者)。该功能的目的是,在许多情况下,相同的命名

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

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

c++ - 封闭循环变量的生命周期和范围是多少?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whatisthescopeofawhileandforloop?for(int32segNo=0;segNo是否会在每次循环时调用对象cm的构造函数和析构函数?如果是这样,析构函数是在循环变量递增之前还是之后被调用?

c++ - 函数和声明局部变量

刚刚和工作中的同事讨论如何声明变量。对我来说,我已经决定了我喜欢哪种风格,但也许我错了。“C”风格-函数开头的所有变量。想知道变量的数据类型,看函数开头即可。boolFoo(){PARAM*pParam=NULL;boolrc;while(true){rc=GetParam(pParam);...dosomethingwithpParam}}“C++”风格-尽可能将变量声明为局部变量。boolFoo(){while(true){PARAM*pParam=NULL;boolrc=GetParam(pParam);...dosomethingwithpParam}}你喜欢什么?更新问题是关