草庐IT

std_logic

全部标签

c++ - 没有用于使用可变参数调用 std::forward(const std::string &) 的匹配函数

我正在尝试为不可复制、不可移动的类制作一个可移动的包装器,但是我在将conststd::string变量传递给构造函数时遇到问题。下面的最小示例会产生以下错误:#include#include#include#includestructX{std::stringx;X(conststd::string&x):x(x){}X(constX&x)=delete;X(X&&x)=delete;};structWrapper{std::unique_ptrx;Wrapper(constWrapper&wrapper)=delete;Wrapper(Wrapper&&wrapper)=defau

c++ - 将 std::weak_ptr 传递给函数有用吗?

我正在阅读thisarticle由HerbSutter撰写,关于将智能指针传递给函数。他没有提到std::weak_ptr,老实说,我找不到传递这种智能指针有用的好场景。函数是否拥有所有权?传递std::shared_ptr。函数是否只需要对底层对象进行操作?传递原始指针或引用。那么将std::weak_ptr传递给函数是否100%没用? 最佳答案 Soispassingstd::weak_ptrtofunctions100%useless?没有。考虑这个玩具示例。structPointerObserver{std::weak_pt

c++ - std::wstring 长度

std::wstring.length()函数的结果是什么,是wchar_t(s)中的长度还是符号中的长度?为什么?TCHARr2[3];r2[0]=0xD834;//D834,DD1E-musicalGclefr2[1]=0xDD1E;//r2[2]=0x0000;//'/0'std::wstringr=r2;std::coutcapacity:351length:2size:2max_size:2147483646 最佳答案 std::wstring::size()返回字符串中宽字符元素的数量。这与字符数不同(正如您正确注意到的

c++ - 警告 C4172:返回对绑定(bind)到局部变量的 const std::string 的引用。它有多安全?

我刚刚在工作中构建我们的一个项目,我看到添加了一个新功能:conststd::string&ClassName::MethodName()const{return"";}编译器给出警告:WarningC4172:returningaddressoflocalvariableortemporary我认为编译器是对的。这个函数的安全性如何?请注意,该函数不会返回constchar*,这没有问题,因为字符串文字具有静态存储持续时间。它返回对conststd::string的引用 最佳答案 是的,它不安全。返回局部变量或临时变量的地址并取消

c++ - std::atomic 加载方法在与 std::shared_ptr 一起使用时减少引用计数

我想使用std::atomic在我的代码中,以便可以自动更新shared_ptr,但是在访问shared_ptr时我遇到了问题。atomic上的load()方法似乎减少了shared_ptr上的引用计数,因此我无法在不释放对象的情况下实际使用该对象。这是显示问题的一段简化代码...typedefshared_ptrMyClassPtr;typedefatomicMyClassAtomicPtr;//1.MyClassPtrptr(newMyClass());printf("1.use_count=%d\n",ptr.use_count());//2.MyClassAtomicPtrat

c++ - std::vector 和复制构造函数

vectorv;Xx;v.push_back(x);v.push_back(x);v.push_back(x);为什么这段代码调用类X的复制构造函数6次?(使用g++4.7.2STL)拜托,我想知道准确地这个特定的STL在引擎盖下发生了什么。 最佳答案 当您使用push_back()插入x时,内存最终会重新分配以便为新元素腾出空间。然后必须使用复制构造函数X(constX&)复制已经插入的成员。如果你插入v.reserve(3);至少前三个push_back()的重新分配被阻止,因此,将只有三个调用X(constX&)

c++ - std::make_pair:无法将 'ch'(类型 'char')转换为类型 'char&&'

这个问题在这里已经有了答案:C++11make_pairwithspecifiedtemplateparametersdoesn'tcompile(1个回答)关闭9年前。以下代码有什么问题:#include#include#include#include#includeintmain(){std::vector>vec;for(unsignedi=0;i(ch,number))!=vec.end());std::cout(ch,number));}}它确实可以很好地编译:g++test.cxx但失败了:$g++-std=c++11test.cxx/tmptest.cxx:Infunct

c++ - 在 std::packaged_task 中使用成员函数

我想做的应该很简单,但我不明白......我只想在后台启动一个类的成员函数在某个特定的时间点。该功能的结果也应该是“外部”可用的。所以我想在构造函数中准备任务(设置future变量,...)并在稍后启动它。我尝试结合std::(packaged_task|async|future)但我没有让它工作。这段代码不会编译,但我认为它显示了我想做的事情:classfoo{private://Thisfunctionshallruninbackgroundasathread//whenitgetstriggeredtostartatsomecertainpointbooldo_something

c++ - move std::thread

尝试制作简单的代码片段:std::threadthreadFoo;std::thread&&threadBar=std::thread(threadFunction);threadFoo=threadBar;//thread&operator=(thread&&other);expectedtobecalled出现错误:useofdeletedfunction'std::thread&std::thread::operator=(conststd::thread&)'我将threadBar明确定义为右值引用,而不是普通引用。为什么不调用预期的运算符(operator)?如何将一个线程m

c++ - std::vector 成员的移动语义

我想确保我正确理解了这一点。我在这里问它,因为我没有明确说明它的资金。例如我有一个三角形网格类,基本上是这样构建的:classMesh{public:structFace{unsignedinta;unsignedintb;unsignedintc;};//...private:std::stringfile;std::vectorvertices;std::vectornormals;std::vectortexcoord;std::vectorfaces;}由于网格中的数据可能会变得非常大,我想实现适当的移动语义。对于指针类型,我完全理解这一点,但要触发右值构造函数,我需要使用移动