草庐IT

临时表

全部标签

c++ - *non*-const 引用会延长临时人员的生命周期吗?

曾几何时,我认为这样的代码会失败:constMyClass&obj=MyClass();obj.DoSomething();因为MyClass对象将在其完整表达式结束时被销毁,留下obj作为悬空引用。但是,我(在这里)了解到这不是真的。该标准实际上有一个特殊规定,允许const引用使临时对象保持事件状态,直到所述引用本身被销毁。但是,需要强调的是,只有const引用具有这种能力。今天我在VS2012中运行了下面的代码作为实验。structFoo{Foo(){std::cout调用f()时的输出是:ctorHelloworlddtor所以我查看了C++11草案标准,但只发现了这个(第12

Jsdelivr CDN 加速服务又被 DNS 污染了(附临时解决方案)

近两天写博客的时候发现Jsdelivr的CDN加速服务用不了,具体表现为添加JsdelivrCDN的链接无法访问。这里给个例子:GitHub图片原链接(访问有点慢)https://raw.githubusercontent.com/XavierJiezou/ys-dl/main/image/favicon.ico添加JsdelivrCDN加速后的链接(提高GitHub静态资源的访问速度)https://cdn.jsdelivr.net/gh/XavierJiezou/ys-dl@main/image/favicon.ico之前,添加CDN后,GitHub的图片访问速度会变得很快,但现在竟然无法

OneDrive 等应用导致,报道称 Windows 10 / Windows 11 临时文件夹充斥数 GB 的日志文件

 6月1日消息,根据国外科技媒体borncity报道,根据部分网友反馈,发现在Windows系统中,由于Office、MicrosoftWord和OneDrive应用,在临时文件夹TEMP中存在容量高达数GB的 Aria-debug-xxx.log 文件。网友David在今年3月反馈,在临时文件夹下,发现了多个 Aria-debug-xxx.log(xxx随机产生)的文件,每个日志文件都有数GB。在发现并清理了这些日志文件之后,David发现微软Word应用以100MB/s的速度读取SSD文件,之后生成了一个新的日志文件。该媒体进行了调查,发现这个问题最早可以追溯到2017年,并通过排查确认了

c++ - 无法将临时对象作为引用传递

这是一个非常简单的例子:classFoo{public:Foo(intx){};};voidProcessFoo(Foo&foo){}intmain(){ProcessFoo(Foo(42));return0;}以上在VisualStudio上编译正常,但在Linux和Mac上会产生错误。编译上面的代码会生成这个:$g++-std=c++11-cnewfile.cppnewfile.cpp:Infunction‘intmain()’:newfile.cpp:23:23:error:invalidinitializationofnon-constreferenceoftype‘Foo&’

c++ - 无法将临时对象作为引用传递

这是一个非常简单的例子:classFoo{public:Foo(intx){};};voidProcessFoo(Foo&foo){}intmain(){ProcessFoo(Foo(42));return0;}以上在VisualStudio上编译正常,但在Linux和Mac上会产生错误。编译上面的代码会生成这个:$g++-std=c++11-cnewfile.cppnewfile.cpp:Infunction‘intmain()’:newfile.cpp:23:23:error:invalidinitializationofnon-constreferenceoftype‘Foo&’

c++ - 抛出临时变量而不是局部变量 - 为什么?

有问题的代码是这样的:structsomething_bad_happened_exception:std::exception{};voidfoo(){something_bad_happened_exceptione;throwe;}clang发出警告,内容如下:Throwexpressionshouldthrowanonymoustemporaryvaluesinstead[cert-err09-cpp]这意味着foo()应该改为:voidfoo(){throwsomething_bad_happened_exception();}为什么抛出一个临时变量而不是一个局部变量更好?

c++ - 抛出临时变量而不是局部变量 - 为什么?

有问题的代码是这样的:structsomething_bad_happened_exception:std::exception{};voidfoo(){something_bad_happened_exceptione;throwe;}clang发出警告,内容如下:Throwexpressionshouldthrowanonymoustemporaryvaluesinstead[cert-err09-cpp]这意味着foo()应该改为:voidfoo(){throwsomething_bad_happened_exception();}为什么抛出一个临时变量而不是一个局部变量更好?

c++ - range-for 表达式中的临时生命周期

考虑一个可以用作范围的简单类A:structA{~A(){std::cout如果我在range-for中创建一个临时A,它的工作原理与我希望的完全一样:for(autoc:A{"works"}){std::cout但是,如果我尝试包装临时:structwrap{wrap(A&&a):a(std::move(a)){}constchar*begin()const{returna.begin();}constchar*end()const{returna.end();}A&&a;};for(autoc:wrap(A{"fails"})){std::cout为什么A的生命周期没有针对整个范围

c++ - range-for 表达式中的临时生命周期

考虑一个可以用作范围的简单类A:structA{~A(){std::cout如果我在range-for中创建一个临时A,它的工作原理与我希望的完全一样:for(autoc:A{"works"}){std::cout但是,如果我尝试包装临时:structwrap{wrap(A&&a):a(std::move(a)){}constchar*begin()const{returna.begin();}constchar*end()const{returna.end();}A&&a;};for(autoc:wrap(A{"fails"})){std::cout为什么A的生命周期没有针对整个范围

c++ - 为什么 char{} 和 char() 用作 char* 参数的临时变量?

在VisualC++2017(使用/std:c++14或使用/std:c++17)中,以下代码有效:voidTakePtr(char*);//constornotintmain(){TakePtr(char{});TakePtr(char());}我不明白为什么会这样。显然,以下方法也可以(如预期的那样):voidTakeChar(char);TakeChar(char{});TakeChar(char());当char{}或char()用作参数?现在,如果我同时有char和char*重载,它可以正常工作而不会出现任何关于歧义的错误/警告:voidTakePtr(char*);void