草庐IT

弱引用

全部标签

c++ - 当您不取消引用时,指针不只是一个引用吗?

当你不取消引用时,指针不只是一个引用吗?#include"stdafx.h"#defineBOOST_TEST_MODULEexample#includestd::list*user_defined_func(){std::cout*l=newstd::list;l->push_back(8);l->push_back(0);std::cout&L1){std::cout::iteratorit1=L1.begin();for(;it1!=L1.end();++it1){if(*it1*list1=user_defined_func();BOOST_CHECK_PREDICATE(va

c++ - C++ 中的引用函数

我有一个函数,当我尝试编译它时出现错误“无法从‘int’转换为‘int&’”。int&preinc(int&x){returnx++;}如果我用x替换x++,它会编译,但我不确定这有什么不同。我认为x++在递增x之前返回x,所以对于preinc返回的内容,“returnx++”不应该与“returnx”相同吗?如果问题出在作用于x的++运算符上,那么如果我在return语句之前或之后放置“x++”行,或者将x++替换为++x,为什么它不会产生任何错误? 最佳答案 x++创建原始拷贝的临时拷贝,递增原始拷贝,然后返回临时拷贝。因为您的

c++ - C++中没有指针的循环引用

有没有一种方法可以不使用指针来定义循环引用?我需要这样的东西:structA;structB{Aa;};structA{Bb;};谢谢! 最佳答案 您可以改用引用structA;structB{A&a;};structA{Bb;};但是不,如果没有某种程度的间接寻址,就不可能创建循环引用。您的示例所做的甚至不是创建循环引用,而是试图创建递归定义。结果将是一个无限大的结构,因此是不合法的。 关于c++-C++中没有指针的循环引用,我们在StackOverflow上找到一个类似的问题:

c++ - 应该问什么问题来测试面试候选人对 C++ 引用资料的了解?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。如果应聘者说他的C++知识是7/10,而你想测试他对C++引用资料的了解,你会问什么问题?我想到了以下几点:写一个函数声明,以指针为引用,有默认值,请他找出错误并解释。将文字作为参数传递给以该参数作为引用的函数。还有其他问题可以更好地测试候选人对C++引用文献的整体知识吗?谢谢,

c++ - unique_ptr 的取消引用运算符在 Eclipse 中不起作用

按照thispost中的步骤操作后我设法让Eclipse(Indigo)识别unique_ptr(和其他C++11新东西)。问题是operator->forunique_ptr似乎在Eclipse中不受支持。这里有一个例子:classFoo{voidbar(){/*...*/}};std::unique_ptrfoo;(*foo).bar();//1foo->bar();//2Case1按预期工作:没有错误并且自动完成工作。然而,对于案例2,Eclipse将语句标记为错误(“无法解析方法'bar'”),而且foo->的自动完成功能不起作用。最有趣的是,我对std::shared_ptr

c++ - 左值参数是否更喜欢左值引用参数而不是通用引用?

在使用通用引用时,我遇到了clang和gcc不同意重载解决方案的情况。#includestructfoo{};templatevoidbar(T&){std::coutvoidbar(T&&){std::coutgccreports上面的调用是模棱两可的。然而,clang选择T&重载并成功编译。哪个编译器出错了,为什么?编辑:在VS2013Preview上测试了相同的代码,它与clang一致;除了Intellisense,它在gcc方面:-) 最佳答案 “通用引用”将参数推导为foo&。第一个模板还将参数推导为foo&。C++对函数

c++ - 是否存在返回 RValue 引用 (&&) 有用的情况?

函数应该返回右值引用是否有原因?一种技术、技巧、成语或模式?MyClass&&func(...);我知道returningreferences的危险一般来说,但有时我们还是会这样做,不是吗?T&T::operator=(T)只是一个惯用的例子。但是T&&func(...)怎么样?我们这样做有什么好处吗?与仅编写客户端代码相比,编写库或API代码可能会有所不同? 最佳答案 适当的场合有几种,但相对较少。当您希望允许客户端从数据成员move时,在一个示例中出现了这种情况。例如:templateclassmove_iterator{pri

c++ - 引用 "auto"函数作为模板参数

这是重现问题的最小(C++14)代码:templatestructFoo{staticautovalue(){}};voidbar(){}templatestructFoo::value>;GNUC++“g++(Ubuntu5.1.0-0ubuntu11~14.04.1)5.1.0”编译器发出:error:couldnotconverttemplateargument‘Foo::value’to‘void(&)()’templatestructFoo::value>;^我注意到的第一个奇怪的事情是Foo::value—a未被替换,并且value不知何故变成了模板?以下无意义的修复强化了

c++ - 我是否在简单的 OpenMP for 循环中误用了引用变量,还是 clang 错误?

我想我发现了一个clang++错误,但希望就我的代码是否正确提出建议。Clang静态分析器认为它没问题,并且编译没有问题,但是当使用clang3.7编译时,它从传递的引用vector中获取的大小完全错误。GCC和clang3.8都给出了正确的答案。我已将其简化为这个测试用例:#include#include//includingorexcludingompmakesnodifference#includevoiddoSomething(std::vector&k){#pragmaompforfor(inti=0;iv;v.push_back(1);std::vector&j=v;doS

c++ - 在 C++ 中转发引用和转换构造函数

假设我想创建一个函数,通过引用获取左值和右值字符串参数,将它们转换为大写,并将它们打印到标准输出:voidupper_print(std::string&s);voidupper_print(std::string&&s);这工作正常,如下所示:std::strings("Helloworld");upper_print(s);upper_print(std::string("Helloworld"));upper_print("Helloworld");//convertingctorused但是,为了避免冗余,我想改用转发引用:templateupper_print(T&&s);不