草庐IT

临时表

全部标签

c++ - 如何避免在 std::modf 中使用临时变量?

我最近遇到了一个问题,我在MSVC中遇到了段错误,而在GCC中却不会。几小时后我意识到我的MSVC版本显然不支持以下语法:doublevalue=3.4;doublefractional=std::modf(value,nullptr);我不想/关心数字的全部部分。是的,我知道我可以做“3.4-3.0”之类的,但我担心以这种方式专门使用modf。目前我只能通过以下方式看到这样做:doubletemp;doublevalue=3.4;doublefractional=std::modf(value,&temp);有没有办法绕过这个临时变量? 最佳答案

c++ - 临时工的生命周期

这个问题在这里已经有了答案:Doesaconstreferenceclassmemberprolongthelifeofatemporary?(6个答案)关闭9年前。下面的代码显示在函数create()中创建的对象的生命周期被延长到在main中创建的constref的生命周期,这在所有情况下都是正确的吗?我的意思是我们可以在某些情况下通过创建对它的引用来延长临时的生命周期?或者在这种特定情况下,编译器行为不当?用MSVC2005编译#includeclasstestClass{public:testClass(){std::cout输出intestClass0018FF13wegota

可以使用全局临时表吗?

我有一个查询,从概念上可以这样描述:CREATETABLE##MyTable(--rows)INSERTINTO##MyTable(...)/*insertedSELECT*/WHILE....BEGIN--dosomeactionsusingdatafromtemptableENDEXECmsdb.dbo.sp_send_dbmail--otherdataneededforemailsending...@query=N'select...FROM##MyTable;',--dropthetemporarytableDROPTABLE##MyTable因此,我选择了一些数据到全局温度表,它们可

c++ - 以在使用临时对象调用时生成编译器错误的方式重载方法

也许这段代码最能说明我的意图:#includetemplatevoidf(std::arrayarr){}templatevoidf(std::array&&arr){static_assert(false,"Thisfunctionmaynotbecalledwithatemporary.");}f()应该为左值而不是右值编译。此代码适用于MSVC,但GCC在static_assert上跳闸,即使从未调用此重载也是如此。所以我的问题有两个方面:如何使用现代C++正确表达我的意图,以及为什么编译器在从未实例化的“死”模板重载中评估static_assert?在线试用:https://g

c++ - 临时字符串的内存分配

我有一个关于字符串的问题,或者特别是关于字符串使用的内存的问题。我正在使用MSVC2010。考虑这段代码:voidTest(){LPWCSTRString=L"Testing";PrintString(String);}voidPrintString(LPWCSTRString){//printStringtoconsoleorsimilar}以这种方式创建和使用字符串是否安全?当字符串超出范围时,是否释放了为存储字符串分配的内存? 最佳答案 是的,它是安全的,但实际上没有分配;)L"Testing"将保留在您的exe文件的只读部分

c++ - 连续调用临时对象的方法

这个问题在这里已经有了答案:Lifetimeoftemporaries(2个答案)关闭8年前。是否符合以下代码标准:structTemp{Temp&op1(){...;return*this;}Temp&op2(){...;return*this;}//moreop...};Temp().op1().op2()....;//safeornot?WhichparagraphfromISO12.2qualifiesit?

c++ - 使临时变量的 const 引用成员安全吗?

我曾多次尝试这样编写代码:structFoo{doubleconst&f;Foo(doubleconst&fx):f(fx){printf("%f%f\n",fx,this->f);//125125}doubleGetF()const{returnf;}};intmain(){Foop(123.0+2.0);printf("%f\n",p.GetF());//0return0;}但它根本不会崩溃。我还使用valgrind来测试程序,但没有出现错误或警告。因此,我假设编译器自动生成了一段代码,将引用指向另一个隐藏变量。但我真的不确定。 最佳答案

c++ - 存储在类中的闭包中通过引用捕获的临时对象的生命周期

考虑以下代码片段:structfoo{};templatestructimpl:F{impl(F&&f):F{std::move(f)}{}autoget(){return(*this)();}};templateautoreturner(X&&x){returnimpl{[&x]{returnx;}};//^~}intmain(){autox=returner(foo{}).get();}liveexampleonwandbox.org是否保证foo{}在returner(foo{}).get()表达式的整个持续时间内都有效?或者foo{}是否只对returner(foo{})有效,

c++ - 在 Constructor works 中将临时变量传递给引用 arg。但不是一般的功能。为什么?

这个问题在这里已经有了答案:Defaultconstructorwithemptybrackets(9个回答)关闭7年前。考虑以下代码。在这里,即使构造函数是A(B&b),Aa(B())也会编译;但是print(B())不起作用。但是print也被声明为print(B&b);为什么会出现这种不一致?#includeusingnamespacestd;classB{public:charb;};classA{public:Bb;A(B&b);A(){}};A::A(B&b){this->b=b;}voidprint(B&b){}intmain(){print(B());Aa(B());}

c++ - 使用标准构造函数传递临时对象

我想将一个临时对象(例如std::string)传递给我对象的构造函数:classMyClass{public:MyClass(stringa):a(a){}stringa;};intmain(intargc,char*argv[]){MyClassa(string());cout但是我收到这个错误:main.cpp:Infunction‘intmain(int,char**)’:main.cpp:28:11:error:requestformember‘a’in‘a’,whichisofnon-classtype‘MyClass(std::string(*)()){akaMyClas