草庐IT

弱引用

全部标签

C++ const 语义引用

如果代码中有如下内容:func(constbase&obj)const语义是什么意思?这里的常数是什么?obj是对非常量对象的const引用还是对const对象的非常量引用? 最佳答案 没有“非常量”引用这样的东西,也就是说,引用总是绑定(bind)到同一个对象,而且没有办法改变它。"consttype&"表示对const类型的引用。 关于C++const语义引用,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

c++ - 参数通过引用传递给指针问题

每次我尝试编译我的代码时都会出现错误:cannotconvertparameter1from'int*'to'int*&'测试代码如下所示:voidset(int*&val){*val=10;}intmain(){intmyVal;int*pMyVal=newint;set(&myVal);//我想一次调用该函数,而不是在某处创建一个指针来传递它。由于指针没有构造函数,因此无法完成类似的操作:set(int*(&myVal));有没有其他方法可以通过引用传递指针而不需要创建临时变量?编辑:顺便说一句,我知道为什么代码无法编译(我只是传递可能是int而不是实际指针的地址)。问题是它还能如

c++ - 总是使用指针而不是引用是否可以接受,以便在需要时轻松转换为智能指针?

我知道引用优于指针,但更改所有这些“.”非常乏味。需要时“->”。那么总是使用指针而不是引用是一种可以接受的做法,以便在需要时轻松地将它们转换为智能指针吗?或者有什么方法可以快速更改对指针的引用? 最佳答案 Soisitanacceptablepracticetoalwaysusepointersinsteadofreferences,tobeeasilyconvertthemtosmartpointersifneeded没有。一般来说,always规则总是不好的。(包括这个)。为什么要将引用转换为智能指针?如果它是引用,则无需担心

c++ - 通过 const 引用传递 Qt 类

众所周知,Qt类使用copy-on-wite按值传递时。因此,直到需要时才进行复制。当只需要对对象进行只读访问时,我已经看到很多次通过const引用传递Qt类。为什么人们传递constQString&而不是简单的QString如果在这两种情况下都没有完成复制? 最佳答案 这是因为魔法是有代价的。QString不会复制整个字符串,但会计算引用。QString的多次复制会减慢程序的速度。如果constQString&足以满足您的需求,为什么不使用它呢?它仍然更快。 关于c++-通过const

C++ 构造函数——通过引用传递仅适用于 const。为什么?

所以今天早些时候,我正在catch很好的旧C++,当我编译我的代码时它不工作。像一些程序员一样,我开始四处寻找,最终发现添加键盘const可以解决问题。但是,我不太喜欢黑客攻击,想知道为什么代码在添加const后运行良好。这是我在将const添加到构造函数之前的代码:#include#includeusingnamespacestd;classNames{private:string_name;string_surname;public:Names(string&name,string&surname):_name(name),_surname(surname){}stringgetN

c++ float* 数组作为对 std::vector<float> 的引用

我想创建一个std::vectorvpd这将是对float*的引用.float*old=newfloat[6];for(inti=0;ivpd(6);autorefasd=&*vpd.begin();*refasd=*old;vpd[0]=23;cout如果我想得到23,我应该如何修改代码呢?来自cout? 最佳答案 你不能。std::vector并非旨在获取原始指针的所有权。也许你可以凑合用std::unique_ptr,但更好的解决方案是直接使用std::vector. 关于c++f

c++ - "dynamic_cast"之后的 NULL 指针实际上可以取消引用吗?

以下代码编译正确并得到神秘的输出:specialInvestmentfunction00000000(环境:C++VS2010)#include#includeusingnamespacestd;classSecurity{public:virtual~Security(){}};classStock:publicSecurity{};classInvestment:publicSecurity{public:voidspecial(){cout(p)->special();cout(p)怎么可能呢?取消引用NULL指针并获得“正确”输出而不是崩溃?是VS2010的特殊“特性”吗?现在

c++ - 为什么我的字符串引用成员变量在 C++ 中设置为空字符串?

考虑以下代码:classFoo{private:conststring&_bar;public:Foo(conststring&bar):_bar(bar){}conststring&GetBar(){return_bar;}};intmain(){Foofoo1("Hey");cout当我执行此代码时(在VS2013中),foo1实例在其_bar成员变量中有一个空字符串,而foo2's相应的成员变量持有对值“You”的引用。这是为什么?更新:我当然在这个例子中使用了std::string类。 最佳答案 对于Foofoo1("Hey

C++11 右值引用与常量引用

这可能是显而易见的,但我认为这对我来说有些困难。鉴于此:voidtest(std::string&&){}std::stringx{"test"};test(std::move(x));//ok此代码以右值引用作为参数调用test(),因此程序可以按预期进行编译。现在看看这个:voidother_test(conststd::string&){}std::stringx{"test"};other_test(std::move(x));//ok???我在这里倾斜了。为什么这个版本编译?std::move返回&&类型;为什么我在使用const&的第二种方法中没有出现错误?我知道int&&

c++ - 为什么取消引用字符串 vector 迭代器需要括号?

vectorMyStrings;vector::iteratorItStr;我正在使用c_str()返回指向字符串的指针。为什么需要用括号取消引用?不编译:*ItStr.c_str();errorC2039:'c_str':isnotamemberof'std::vector::iterator'编译/使用迭代器周围的括号:(*ItStr).c_str();如果您能给我指出正确的方向(没有双关语意),我将不胜感激。谢谢! 最佳答案 .的优先级高于一元*.*ItStr.c_str()就像您说的是*(ItStr.c_str())。当然,