草庐IT

try_emplace

全部标签

java - try catch block 创建干净代码的最佳实践是什么?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:BestpracticesforexceptionmanagementinJAVAorC#我读过aquestion今天早些时候在stackoverflow上,它让我思考什么是处理异常的最佳实践。所以,我的问题是什么是最佳实践来处理异常以产生干净和高质量的代码。这是我的代码,我认为它很简单,但如果我错了或不清楚,请告诉我!我试图牢记方法中的可测试性和相同的抽象级别。欢迎提出建设性意见。:)importjava.awt.Point;importjava.io.Closeable;importjava.io.Fil

c++ - std::unordered_map::emplace 对象创建

我正在选择将事物放入unordered_map的两种方法之一:std::unordered_mapmap;map.emplace(std::piecewise_construct,std::forward_as_tuple(a),std::forward_as_tuple(b,c,d));对比std::unordered_mapmap;auto&value=map[a];if(value.isDefaultInitialized())value=DifferentValue(b,c,d);我做了一些实验,看看哪个表现更好,发现插入唯一元素时,行为(如效率)基本相同。但是,在插入重复项的

c++ - 使用 std::try_to_lock 的意外行为

当我尝试运行以下代码时,我遇到了令人惊讶和冲突的行为。#include#includeintmain(){std::mutexmtx;std::unique_locklock1(mtx);std::unique_locklock2(mtx,std::try_to_lock);std::cout当我在我的计算机上运行它时(使用clang++4.0.1或g++7.3.0的linux)它打印出lock1和lock2拥有锁(奇怪)。当我在cpp.sh上运行它时,它说lock1拥有锁,但lock2不拥有锁(如我所料)。所有都使用C++11和-Wall没有优化。 最佳答

c++ - 用什么代替 std::map::emplace?

对于容器,例如std::map>,它看起来像emplace()截至gcc4.7.2尚未在stdc++中实现。不幸的是,我不能按值直接存储Foo,因为它是一个抽象父类(superclass)。作为一个简单但低效的占位符,我一直在使用std::map结合std::vector>用于垃圾收集。一旦emplace()可用,您是否有更高效且更容易替换的临时解决方案? 最佳答案 你需要emplace()做什么?只需将其移入:#include#include#include#includestructFoo{virtual~Foo()=defau

c++ - 使用异常的 C++ 程序是否需要在其主要函数中包含 try/catch block ?

如果异常由C++代码抛出但未被捕获,则会导致SIGABRT。有些系统只打印“Abort”,有些系统还会打印e.what()的内容。问题是:C++标准是否规定main函数中需要try/catchblock才能将程序视为行为良好的程序,还是C++只是默默地依赖系统来处理它? 最佳答案 如C++17standarddraft中所述,在第18.3.9节[except.handle]中:Ifnomatchinghandlerisfound,thefunctionstd::terminate()iscalled;whetherornotthes

C++琐碎的try-catch导致中止

下面是简单的代码//g++centro.cc-ocentro#includeusingnamespacestd;intmain(intargc,char*argv[]){try{cout产生一个中止:GoingtothrowterminatecalledwithoutanactiveexceptionAborted(coredumped)我不明白哪里出了问题,有人能指出我正确的方向吗? 最佳答案 尝试扔东西。您没有抛出任何异常。throw;本身通常用于在catchblock中重新抛出相同的异常。将结果与throw"something

c++ - 如何实现具有 placement new 和 emplace 功能的简单容器?

我需要实现一个容器来容纳一定数量的元素,出于某种原因,它必须在没有任何堆分配的情况下工作。另一个要求是,不应以任何方式复制或移动容器元素。它们必须直接构造到容器分配的内存中。为此,我决定使用placementnew并将内存管理完全委托(delegate)给容器实现(在drdobbs找到了一些关于placementnew的有用信息)。找到一个正在运行的例子here.(请注意,使用newuint8_t[size]和std::queue只是为了让示例保持简单。我的真实代码更复杂,无堆而不是实现。)到目前为止,这非常有效,因为客户端代码必须通过以下调用将元素放入容器中:executer.pus

c++ - 尽管 try-catch 异常仍泄漏到系统

我在继承的应用程序中有以下代码,使用VS2012针对boost1.48.0构建boolConvertToBoolean(conststd::string&s){try{returnboost::lexical_cast(s);}catch(...){if(boost::iequals("true",s.c_str())){returntrue;}}returnfalse;}如果您将“True”或“False”传递给此方法,lexical_cast将抛出一个bad_lexical_cast异常,因为它需要“0”或“1”并将评估字符串比较。这似乎在我的机器上工作正常,无论是在调试器内还是在

c++ - 为什么 c++17 的 emplace() 函数没有引用资格?

C++17引入了一些新的函数签名emplace_back()类型函数(std::optional也有一个),但它们不是引用限定的。这允许emplace_back()在临时对象上调用并绑定(bind)到左值引用,即使对象的生命周期没有延长。请考虑以下事项:#include#include#includestructA{A(inti):i(i){std::cout().emplace(5);std::cout().emplace_back(5);std::cout(std::in_place,5).value();autoconst&a2=std::optional(std::in_pla

包含 return 的 C++ 宏表达式(就像 Rust 的 try!)

Rust有一个宏,它是一个表达式,可以计算出某个值,或者从函数返回。有没有办法在C++中做到这一点?像这样:structResult{boolok;intvalue;}Resultfoo(){...}#defineTRY(x)(auto&ref=(x),ref.ok?ref.value:return-1)intmain(){inti=TRY(foo());}不幸的是,它不起作用,因为return是一个语句而不是表达式。上面的代码还有其他问题,但它大致说明了我想要什么。有没有人有什么好主意? 最佳答案 感谢NathanOliver的l