草庐IT

局部剪枝

全部标签

c++ - 如何延长局部变量的生命周期或使用引用的正确方法是什么

我正在开发一些类(class)并遇到了这个问题。考虑我有以下类(class):structA{int*p;A(){p=newint(1);cout下面的类有A作为属性(property):classB{public:B(){}AmyList;constA&getList(){returnmyList;};};这个函数检查一些变量值并在不同情况下返回不同的对象:Btemp;Afoo(boolf){Aa;*a.p=125;if(f)returna;else{returntemp.getList();}}现在,我想像这样使用这个函数:Alist1=foo(true);if(list1.p!=

c++ - 命名空间内全局变量的外部局部变量

以下代码可以正常工作:文件1.cpp//globalvariableintg_myvar1=5;文件2.cppintmyfunc(){externintg_myvar1;g_myvar1++}如果file1.cpp是这样的话,file2.cpp怎么办:文件1.cppnamespacemyns{//globalvariableintg_myvar1=5;}注意1,以下给出了GCC4.7上的编译错误“无效使用合格名称”。我也尝试过“使用命名空间”,但没有成功。intmyfunc(){externintmyns::g_myvar1;g_myvar1++}注意2,以下是有效的,但我正在寻找仅局

c++ - 类模板的 C++1 7's "模板参数推导可以推导局部类型吗?

P0091R3("Templateargumentdeductionforclasstemplates")最近添加到gcctrunk并且可以在wandbox上进行测试.我的想法是使用它来实现一个“作用域守卫”只需几行代码:scope_guard_([]{cout我试过了implementingitonwandbox...templatestructscope_guard:TF{scope_guard(TFf):TF{f}{}~scope_guard(){(*this)();}};intmain(){scope_guard_{[]{}};}...但是编译失败并出现以下错误:prog.cc

c++ - 函数调用与局部变量

我经常看到多次调用其他函数而不是存储一次函数结果的函数。即(1):voidExampleFunction(){if(TestFunction()>x||TestFunction()相反,我会这样写,(2):voidExampleFunction(){inttest=TestFunction();if(test>x||test我认为版本2更易于阅读和调试。但我想知道为什么人们喜欢排名第一的人?有什么我没看到的吗?性能问题?当我查看它时,我看到在最坏的情况下,数字(1)中有4个函数调用,而不是数字(2)中的1个函数调用,因此数字(1)中的性能应该更差,不是吗?

c++ - C++ 循环内定义的局部变量

在下面的一段C++代码中:for(inti=0;i变量(y)是在每次循环迭代时分配,然后在迭代完成时取消分配,还是为所有循环迭代分配一次?提到的代码是否等同于以下代码?:inty;for(inti=0;i 最佳答案 它会在调用函数时在堆栈上分配一次。在性能方面,这两种方式之间没有区别(但回想一下,在最后一种方式中,y仍将在循环后的范围内)。变量似乎在每次迭代之间创建和销毁(因此它在迭代之间“丢失”其值)是编译器创建的一种行为;实际内存位置始终相同。 关于c++-C++循环内定义的局部变量

c++ - 拥有一个与非线程局部变量同名的线程局部变量是否可以?

我有一个线程局部变量envptr和非线程局部变量也称为envptr。后一个变量仅在其运行代码看不到线程局部变量声明的单个线程中使用。线程局部变量由不同的线程使用,每个线程都看不到也不需要看到非线程局部变量的声明。这种情况是否可能并产生定义的行为?我在x86上使用linux32位和64位。 最佳答案 它们是同一个变量吗?换句话说,什么是他们的linkage?如果它是外部的,那么就没有。如果它是内部的,那么就可以了,除非这两个定义都出现在同一个文件中。没有联动就没有问题。除非我忽略了什么,否则thread_local对链接没有影响,所以

c++ - 要创建持久变量,是局部静态变量好还是全局变量好?

假设您有一个类(c++)或模块(单个c文件)。然后在你的一个函数中你想存储一个变量的拷贝并保持它的值直到下一次调用该函数,最好是有一个全局的(在c++中可以是私有(private)的,而不是在c中是外部的以保持它在模块范围内)或创建一个局部静态变量?例如:voidsome_func_that_does_not_do_anything_useful(intarbVal){staticintlastArbVal=0;if(arbVal>lastArbVal){lastArbVal=arbVal;}}我制作静态的原因是尽可能限制其范围,但我读到的某些内容建议您为此使用全局变量,所以现在我很困

c++ - 创建与推导参数具有相同类型的局部变量的最简单方法是什么?

即:[](autoconst&foo){???bar;//shouldbesamebasetypeasfoo,minusconst&}到目前为止,我正在使用:typenamestd::remove_const::type>::typecombination但我真的希望有更简单的选择! 最佳答案 std::decay::type,或decay_t如果你的std库已更新。它模拟各种函数参数衰减。如果您的arg是函数引用,它会处理。在引用数组时,它也会生成一个指针,这不太理想。如果您想以不同的方式处理这些问题,则必须自己动手。

c++ - 在 C++ 中通常调用退出 block 时如何销毁局部变量?

C++以相反的顺序自动调用block中所有局部变量的析构函数,无论block是正常退出(控制失败)还是抛出异常。看起来像术语stackunwinding只适用于后者。关于销毁局部变量,前一个进程(block的正常退出)是怎么调用的? 最佳答案 当对象“超出作用域”时,它会自动销毁。这可以称为“自动存储回收”,但实际上指的是垃圾收集(有几篇论文的名称中包含该短语,使用该术语来表示垃圾收集)。当它用于确保打开/关闭、锁定/解锁或其他形式的资源获取与其适当释放的正确配对时,它被称为ResourceAcquisitionisInitiali

c++ - 方法中的静态局部变量是一种不好的做法?

有些事情困扰着我。在非线程程序中,局部静态变量(方法内部)还是静态类成员更好?在这个例子中:classC{public:C(){};voidfoo();};voidC::foo(){staticintbar=0;bar++;printf("%d\n",bar);}如果bar仅在C::foo()中使用,是否被视为不良做法? 最佳答案 两者都不是更好。它们服务于非常不同的用例 关于c++-方法中的静态局部变量是一种不好的做法?,我们在StackOverflow上找到一个类似的问题: