草庐IT

std-ranges

全部标签

c++ - boost::lexical_cast<std::string>(Int_Type) 可以抛出吗?

有没有可能boost::lexical_cast(Int_Type)扔?我唯一能想到的是字符串没有内存的地方,但是还有其他更合理的选择吗? 最佳答案 根据documentation,lexical_cast可以扔bad_lexical_cast.最重要的是,正如您已经提到的,可能存在动态分配,它总是会导致bad_alloc异常。编辑:至于具体情况lexical_cast,除了分配错误之外,链上的任何部分似乎都不太可能失败,但文档并不(据我所知)保证不会出现“错误转换”异常。 关于c++-

c++ - std::showbase 和 std::showpos 是否互斥?

这个问题源于我关于使用通常的ostream&operator输出数值的正确方法的讨论。对于C++中的数字类型。我熟悉每个基数中std::showbase和std::showpos的行为,它们基本上是互斥的。即:十进制不显示底数,正数加'+';而在十六进制或八进制中,会显示基数,但不会显示“+”(也不会显示负号),因为打印的类型值就好像它被转换为无符号类型一样。例如,这个简单(冗长)的程序:#includeintmain(){std::cout使用GCC编译时给出此输出:+5050x5-5017777777777777777777730xfffffffffffffffb这是我一直期望的,

c++ - std::atomic 将一对原子 int32 视为一个原子 int64?

我有一对unsignedint32std::atomic_start;std::atomic_end;有时我想通过比较交换来设置开始或结束,所以我不希望在整个64位对上使用CAS可能导致虚假故障。我只想使用32位CAS。_end.compare_exchange_strong(old_end,new_end);现在我可以将开始和结束作为一个64位原子读取来获取。或者两个单独的32位读取。执行一次64位原子提取(编译器添加适当的内存栅栏)而不是使用两个内存栅栏进行两次单独的32原子位读取(或者编译器会优化它吗?)会不会更快?如果是这样,我将如何在C++11中做到这一点?

c++ - 与 const std::T 的并发

例如,考虑用伸展树(SplayTree)实现的std::map。这种树结构是可变的,每次访问map进行读取时都会发生变化。当map为const时,谁必须保证并发读取的隔离,是由用户代码还是由map实现决定的? 最佳答案 提问者知道,如果您有写入集合的线程,则用户必须管理同步锁定。问题似乎是如果同时线程只读取集合,标准是否可以保证线程安全。我不确定旧的C++标准是否对任何操作的线程安全有任何保证,但新标准会(部分已在评论中给出,23.2.2)。事实上,大多数供应商现在确实保证并发读取之间的线程安全,尽管集合中包含的对象内的并发性显然需

c++ - 将 std::uninitialized_fill() 与任何分配器一起使用是否有意义?

用std::uninitialized_fill()初始化内存有意义吗?当用户作为参数传递的分配器已用于获取内存本身时,在库中?我问这个是因为分配器应该提供自己的construct()方法(allocate()方法除外),其实现可能与标准方法不同,因此可能是std::uninitialized_fill()并不总是适用于所有情况。准确的说,我的疑惑来自Stroustrup写的C++书(附录E“Standard-LibraryExceptionSafety”,E.3.1节),书中作者给出了一个templatevector::vector(size_typen,constT&val,con

c++ - 单步执行 std::function 调用时如何跳过 std 命名空间中的方法调用? (使用 GDB。)

如果我需要通过std::function调用,使用调试器单步执行函数对象可能会非常困惑。是否可以通过某种方式跳过这些帧? 最佳答案 gdb7.4为此添加了skip系列命令。(gdb)aproposskipinfoskip--Displaythestatusofskipssetstep-mode--Setmodeofthestepoperationshowstep-mode--Showmodeofthestepoperationskip--Ignoreafunctionwhilesteppingskipdelete--Deletesk

c++ - 由于 #pragma pack 错误导致的内存损坏 - std 映射损坏 - 插入时崩溃

我有一个正在处理的项目,在该项目中,std映射有一些奇怪的行为。我定义了自己的typedef映射,它将字符串映射到自定义类型的指针。将第一对添加到map后,只要我超出map,应用程序就会崩溃。经过一番折腾后,我将map更改为a并将其移至我的应用程序中的第一个调用,但它仍然崩溃。我不知道会发生什么。任何帮助,将不胜感激。这是目前崩溃的代码。LoggerPtrsyslogger(Logger::getLogger("CISInterface"));intmain(intargc,char*argv[]){typedefstd::mapMyMapDef;MyMapDeftmpString;t

c++ - 更改或检查 std::ofstream 的打开模式

在一些使用std::ofstream执行大量文件i/o的代码中,我正在缓存流以提高效率。但是,有时我需要更改文件的打开模式(例如追加与截断)。这是一些类似的模拟代码:classLogger{public:voidwrite(conststd::string&str,std::ios_base::openmodemode){if(!myStream.is_open)myStream.open(path.c_str(),mode);/*Want:if(myStream.mode!=mode){myStream.close();myStream.open(path.c_str(),mode)

c++ - std::reference_wrapper 何时转换为 T&?

考虑以下代码:#include#includeusingnamespacestd;templatevoidfun(Tt){t+=8;}intmain(){inti=0;fun(ref(i));cout此代码打印“8”。我假设fun()中的t自动转换为int&。但是如果我用t=8替换t+=8,程序将无法编译。为什么? 最佳答案 reference_wrapper有一个到T&的隐式转换运算符,所以它会被转换成T&无论哪里T&是比reference_wrapper更好的匹配.在扩充赋值表达式中,唯一可行的运算符是int&operator+

c++ - 实现自定义(字符串)流时的 Xcode 4.5.2 libc++ std::bad_cast

我在使用char16_t作为char类型实现我自己的自定义stringbuf和stringstream时遇到问题。作为测试,我使用了一个nullstringbuf和nullstringstream,它们是我在一本旧的、可能已经过时的C++手册中找到的。这个nullstringstream充当“/dev/null”并且是一个简单的实现。当我使用时,这个简单的nullstream正在工作但是当我使用时失败并出现std::bad_cast异常.我知道必须有一个char_traits可用,但libc++似乎有它。classnullstringbuf:publicstd::basic_strin