草庐IT

局部剪枝

全部标签

c++ - 返回值和局部变量的区别

假设我有#includeclassA{public:templateoperatorT();Achild();};voidf(){Aa;std::strings1=a;//okstd::strings2=a.child();//error(line34)s1=a;//error(line36)s2=a.child();//error(line37)}std::string构造函数可以采用char*或std::string引用,这就是赋值不明确的原因。但为什么我的编译器(VC++10)提示第二个赋值而不是第一个?我正在寻找一种方法让模板转换运算符优先于重载的构造函数。我收到以下错误:1>

c++ - 静态变量和线程局部存储

背景:我发现了一些与跨多个线程的静态内存初始化相关的有趣边缘情况。具体来说,我正在使用HowardHinnant的TZ库,它在许多不同的线程中对我的其余代码运行良好。现在,我正在开发一个依赖于另一个线程和条件变量的日志记录类。不幸的是,当我尝试格式化计时表时time_point使用date::make_zoned(data::locate_zone("UTC"),tp)图书馆崩溃了。通过挖掘tz.cpp,我发现内部返回的时区数据库正在评估NULL.这一切都来自以下片段:tzdb_list&get_tzdb_list(){statictzdb_listtz_db=create_tzdb(

c++ - 模板 `inline` 函数的静态局部变量

这个问题在这里已经有了答案:Staticvariableusedinatemplatefunction(3个答案)关闭5个月前。static如果我的理解是正确的,C++中inline函数的局部变量保证像单个全局变量一样存在。如果inline函数是一个模板,编译器可以生成该函数的多个版本,这是否同样适用?

c++ - Visual Studio 调试 - 局部变量的顺序?

我想知道在使用MSVisualStudio调试应用程序时,“本地”选项卡中变量的排序基于什么概念/逻辑。对我来说,它似乎有点随机排序?或者这些变量的排序背后有什么概念吗?是否可以选择按字母顺序对这些变量进行排序?这会非常方便。 最佳答案 我不知道如何直接对本地选项卡中的项目进行排序。但这里有一个解决方法:选择所有本地人(Ctrl-A、Ctrl-C)并将它们粘贴到监视列表(Ctrl-V)。通过(再次解决方法)剪切和粘贴观察列表。请注意,有一个“Autos”监window口。也许它更适合您的需要,尽管您也不能在那里对条目进行排序。最后,

c++ - 返回对局部变量的引用

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:ReturningtheaddressoflocalortemporaryvariableCanalocalvariable’smemorybeaccessedoutsideitsscope?即使知道以下片段会发生什么,也有助于理解它是如何发生的。接下来是四个问题。给定:int&foo(){inti=1;returni;}并且知道在下面对localnamedi的引用被取消引用到分配给intVal的temp并且locali在结束时消失foo()intintVal=foo();第一个问题-在下文中,表达式的右侧与上

c++ - 使用未引用的局部变量警告捕获异常

我有以下代码:try{//dosomestuff}catch(constmy_exception_type&e){LOG("Exception%s",e.what());throw;}问题是在调试构建中LOG被定义为#defineLOG(...)real_logger(...),但在发布构建中被定义作为#defineLOG(...)\\什么都不做。当然,当我在VisualStudio中编译我的发布代码时,我收到了warningC4101:'e':unreferencedlocalvariable。在不生成任何不必要的警告的情况下处理异常日志记录的最佳做法是什么?附言除了记录并重新抛出异

c++ - 为什么 C++ 编译器不优化读取和写入结构数据成员而不是不同的局部变量?

我正在尝试用固定的double创建一些POD值的本地数组(例如max_size)在编译时已知,然后读取运行时size值(size)并首先处理size该数组中的元素。问题是,为什么编译器在arr时不消除堆栈读写?和size被放入同一个struct/class,而不是arr的情况和size是自变量吗?这是我的代码:#includeconstexprstd::size_tmax_size=64;externvoidprocess_value(double&ref_value);voidtest_distinct_array_and_size(std::size_tsize){doublear

c++ - 在 "delete this"之后访问局部变量

我有一个使用引用计数机制的类。当引用计数降为零时,通过调用deletethis最终销毁此类的对象。我的问题是:在deletethis之后我可以使用本地堆栈变量吗?这是一个更具体的例子:classRefCountedClass{public:RefCountedClass(Mutex&m):mutex_(m){}...private:Mutex&mutex_;voidRemoveReference(){//AsIunderstand,mutex_willbedestroyedafterdelete,//butusingmisallrightbecauseitison-stackand//

c++ - 右值引用和 auto&& 局部变量

将局部变量定义为右值引用或转发(通用)引用有什么意义?据我所知,任何有名称的变量都是左值,并且将被视为左值。例子:Widget&&w1=getWidget();auto&&w2=getWidget();w1和w2都是左值,如果稍后将它们作为参数传递,将被视为左值。他们的decltype可能不是,但这有什么区别呢?为什么有人需要以这种方式定义变量? 最佳答案 如果您有一个函数返回一个无法移动的临时对象。Foosome_function();auto&&f=some_function();这是合法的。autof=some_functio

c++ - Lambda、局部类型和全局命名空间

这个最小程序templatevoidfoo(Xx){bar(x);}templatevoidbar(Xx){}intmain(){foo([]{});}用gcc(4.8.5和5.3)编译,用clang(3.7)编译失败我的分析如下。bar在foo中使用,声明在foo之后,所以在foo定义点不可见.在foo实例化点找到bar的唯一方法是通过参数相关查找。foo和bar的唯一参数是在main中定义的lambda。显然gcc认为它的类型是在全局命名空间中声明的,而clang则不然。因此,gcc可以通过ADL找到bar而clang不能。当我们在main中使用本地定义的类型时会发生同样的事情:i