我觉得问这个真的很傻,因为我知道如何做101种方法,但不知道书中定义的方法。(注意,我懂C++)到目前为止,我们只介绍了C++的基础知识。所以基本上,我们知道变量、赋值和基本转换。在书中我遇到了这部分问题:提示用户输入十进制数将该数字转换为最近的整数并将其打印到屏幕上所以我有简单的代码:doublen;cout>n;cout(n)但我意识到这对我不起作用。它总是会截断小数点,以便1.9->1而不是预期的1.9->2如何仅使用我“知道”的内容来解决此问题?(如,没有round()或if语句等)这是标准合规问题吗?在学校我以为我在WindowsXP32位上使用VisualC++2005有类
我想保持std::shared_ptr的智能行为。那么有没有办法在不混淆引用计数的情况下将共享的void指针转换为另一种类型?我无法获取原始指针并从中创建新的共享指针。 最佳答案 您可以使用robmayoff'sanswer中的指针转换;但小心点。这里很容易无意触发未定义的行为:structMyClass{};void*rawPtr=newMyClass;shared_ptrexampleVoid(rawPtr);//Undefinedbehavior;//callsdelete(void*)ptr;shared_ptrexampl
我正在使用std::ptr_fun如下:staticinlinestd::string<rim(std::string&s){s.erase(s.begin(),std::find_if(s.begin(),s.end(),std::not1(std::ptr_fun(std::isspace))));returns;}如thisanswer中所述.但是,这不能使用C++17(使用MicrosoftVisualStudio2017)编译,并出现错误:errorC2039:'ptr_fun':isnotamemberof'std'如何解决这个问题? 最佳答
我有一个std::unique_ptr和另一个原始指针。我希望原始指针指向没有任何所有权的unique_ptr的内容。是只读关系:autobar=std::make_unique();autoptr=bar.get();//Thismaypointtoanothervaluelater这很糟糕吗?有没有其他选择?注意:真实的例子更复杂。他们不在同一个类(class)。 最佳答案 不,还不错,直到标准库包含proposedstd::observer_ptr,这是表达无主观察者的惯用方式。
这里有一些代码片段。std::shared_ptrglobal(newint(1));voidswapper(intx){std::shared_ptrsp(newint(x));global.swap(sp);}假设我想在并行线程中调用swapper。那会是线程安全的吗?我知道answer.它显示了如果我将值重新分配给global,那么分配指针是不是线程安全的。我的问题是swap成员函数本身是否是线程安全的。一方面,shared_ptr的控制block函数是线程安全的。另一方面,我假设我正在交换指向控制block的指针,所以它不应该是线程安全的。那里有什么联系?swap线程安全吗?
使用pImplidiom时是否最好使用boost:shared_ptr而不是std::auto_ptr?我确定我曾经读过boost版本对异常更友好?classFoo{public:Foo();private:structimpl;std::auto_ptrimpl_;};classFoo{public:Foo();private:structimpl;boost::shared_ptrimpl_;};[编辑]使用std::auto_ptr是否总是安全的,或者是否存在需要替代boost智能指针的情况? 最佳答案 您不应该为此使用std
C++11/14中的static_cast或实现此功能的库是否有“安全”替代方案?我所说的“安全”是指强制转换应该只允许不丢失精度的强制转换。因此,从int64_t到int32_t的转换只有在数字适合int32_t时才被允许,否则会报告错误。 最佳答案 有gsl::narrownarrow//narrow(x)isstatic_cast(x)ifstatic_cast(x)==xoritthrowsnarrowing_error 关于c++-是否有"safe"static_cast替代方
在HerbSutter'stalkatCppCon16他建议用conststd::unique_ptr编写pimplidiom(大约10分钟)。这应该如何与移动构造函数/赋值一起使用?c++17中有什么东西吗?我找不到任何东西。 最佳答案 如果您的类应该是永不为空的,那么非常量的唯一ptr(具有默认移动/分配)是不合适的。movector和moveassign都会清空rhs。一个constuniqueptr将禁用这些自动方法,如果你想移动,你必须在impl中编写它(并在外面有点胶水)。我会亲自编写一个具有我想要的语义的值ptr(然后
auto_ptr(以及shared_ptr)尽量使它们的使用透明;也就是说,理想情况下,您应该无法区分您使用的是auto_ptr还是指向对象的真实指针。考虑:classMyClass{public:voidfoo(){}};MyClass*p=newMyClass;auto_ptrap(newMyClassp);p->foo();//Nonotationaldifferenceinusingrealap->foo();//pointersandauto_ptrs当你尝试通过一个指向成员的指针来调用一个成员函数时,这是有区别的,因为auto_ptr显然没有实现op->*():void(M
有没有办法std::bind到std::weak_ptr?我想存储一个“弱函数”回调,当被调用者被销毁时会自动“断开”。我知道如何使用shared_ptr创建std::function:std::functionMyClass::GetCallback(){returnstd::function(std::bind(&MyClass::CallbackFunc,shared_from_this()));}然而,返回的std::function让我的对象永远活着。所以我想将它绑定(bind)到weak_ptr:std::functionMyClass::GetCallback(){std