草庐IT

弱引用

全部标签

c++ - Qt并发运行,按引用传值,但内存地址不一样?

我使用QtConcurrent::run来运行一个函数,并通过引用传递值,但是值的内存地址不同。但是如果我用指针传值,地址是一样的!我想不通。我错过了什么吗?这是代码。voidptr(QString*s){qDebug()f1=QtConcurrent::run(ptr,&str);f1.waitForFinished();QFuturef2=QtConcurrent::run(ref,str);f2.waitForFinished();qDebug()输出:passbyptr:0x28fefcpassbyref:0x525de4addressofstr:0x28fefc

c++ - 对默认参数使用右值引用

我想创建一个函数,它接受一个对象的可选引用,如果没有提供,则在函数运行期间创建一个对象,即voidFoo(Bar&b=Bar()){/*stuff*/}当然,这是无效代码,因为在此上下文中不能将Bar隐式转换为Bar引用。引用不能是const,因为b在函数内部发生了变化。您可以通过使用右值引用来解决这个问题,即voidFoo(Bar&&b=Bar()){/*stuff*/}这是对右值引用的有效使用吗?调用者现在必须在他们的Bar参数上调用std::move,即使我无意像往常一样清除传递的Bar传递右值时的情况。 最佳答案 voidF

c++ - 这个 C++ const 引用访问器接口(interface)习惯用法有什么问题吗?

我正在将一个结构体转换为一个类,这样我就可以为我的变量强制执行一个setter接口(interface)。不过,我不想更改所有读取变量的实例。所以我转换了这个:structfoo_t{intx;floaty;};为此:classfoo_t{int_x;float_y;public:foot_t():x(_x),y(_y){set(0,0.0);}constint&x;constfloat&y;set(intx,floaty){_x=x;_y=y;}};我对此很感兴趣,因为它似乎模拟了C#的公共(public)只读属性的想法。编译正常,我还没有发现任何问题。除了在构造函数中关联const

c++ - 在论文中引用/引用 OpenMP

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎与helpcenter中定义的范围内的编程无关。.关闭4年前。Improvethisquestion我正在写一篇论文并使用OpenMP实现了一个算法。由于VisualStudio直接支持OpenMP,我是否需要在论文中引用OpenMP?

C++:什么是技术层面的 R 值引用 (ASM)?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Whatisthedifferencebetweenr-valuereferencesandl-valuereferences?(CodeGen)我想知道,谁能从技术层面解释一下R值引用是什么?我的意思是:创建R值引用时在汇编程序级别会发生什么。为了进行小测试以查看内部发生的情况,我编写了以下代码:charc=255;char&c2=c;char&c3=std::move(c);我知道创建对“c”的R值引用是没有意义的,但只是为了测试我还是做了,看看它做了什么。结果如下:unsignedcharc=255;m

c++ - 无法在 C++ 中调用 const 引用参数的方法

classA{public:A(){};~A(){};voidmethod(){};};voidcall(constA&a){a.method();//IcannotcallthismethodhereifIuse"const"butIcancallitifnotusing"const"}intmain(){Aa;call(a);return0;}在这种情况下,错误是:“将constA作为voidA::method()的参数传递会丢弃限定符[-fpermissive]|”在函数call中,如果我使用const,我会得到错误,但如果我去掉它,它就会工作。谁能帮我解释一下?

c++ - 忽略函数的按引用返回结果

假设我有一个函数返回一个重要的结果和几个不重要的结果。我声明它以便通过引用返回不重要的结果:intCalculateStuff(intparam1,intparam2,int&result1,int&result2);我想调用这个函数来计算一些东西,但在调用点我想忽略不重要的结果。我可以这样做:...intdummy1,dummy2;intresult=CalculateStuff(100,42,dummy1,dummy2);...//dosomethingwiththeresult我想考虑另一种不声明虚拟变量的方法来做同样的事情:intresult=CalculateStuff(10

c++ - 在同一函数中引用范围外的局部变量是否可以?

在这段代码中,我引用了局部变量b,即使它超出了范围。但我是在同一个函数中做的,所以它可能还在堆栈上,对吧?我运行了该程序并且它有效,但我想知道它是否保证适用于所有实现。#includevoidmain(){int*a;{intb=5;a=&b;}std::cout 最佳答案 不,这不保证有效。一旦退出内部范围,a就会悬空,因此对它的任何取消引用都会导致未定义的行为,并且任何事情都无法保证。 关于c++-在同一函数中引用范围外的局部变量是否可以?,我们在StackOverflow上找到一个

c++ - 传递引用未初始化变量是未定义的行为吗?

我有以下代码:#includevoidf(int&x){x=5;}intmain(){intx;f(x);std::cout此代码是否会调用C++中的未定义行为?g++在没有任何警告的情况下编译它,并且代码打印出5(如预期的那样?)。 最佳答案 此代码中没有未定义的行为。在为未初始化的变量赋值之前使用它是未定义的,但传递引用并通过引用执行赋值是明确定义的。 关于c++-传递引用未初始化变量是未定义的行为吗?,我们在StackOverflow上找到一个类似的问题:

c++ - std::string 的串联引用是安全的吗?

我在看一些已经使用了很长时间没有问题的代码,下面我有一个简化版本:voidSomeClass::someMethod(conststd::string&arg1,conststd::string&arg2){//unrelatedcodeconststd::string&var=arg1+arg2;//varusedinotherconcatenations//varusedtoindexamap}我会假设var使用起来不安全,因为它引用了一个临时变量。这里的临时对象的生命周期太短或者它一直存活到方法结束? 最佳答案 constst