草庐IT

rdbg_std_amd

全部标签

c++ - 带有 std::enable_if 和 std::is_default_constructible 的 SFINAE 用于 libc++ 中的不完整类型

我刚刚在使用SFINAE检测模板类型是否默认可构造时观察到libc++的一个奇怪问题。以下是我能够想出的一个最小示例:#include#includetemplatestructDummy;templatestructDummy{};templatestructhas_dummy:std::false_type{};templatestructhas_dummy>::value>>:std::true_type{};intmain(){std::cout{}(){}()它编译并输出预期的行true和false使用libstdc++使用g++或clang++编译时.但是,当我尝试使用li

c++ - std::initializer_list<int>({1,2,3}) 和 {1,2,3} 有什么区别?

我有以下模板函数:templatevoidfoo2(Tt){}我知道我不能使用以下方式调用它:foo2({1,2,3});因为初始化列表是模板参数的非推导上下文。我必须使用:foo2>({1,2,3});但我也可以使用:foo2(std::initializer_list({1,2,3}));这让我想知道之间有什么区别:{1,2,3}和std::initializer_list({1,2,3})? 最佳答案 Abraced-initlist不是表达式,因此没有类型。当你打电话时foo2({1,2,3});编译器不知道是什么类型{1,

c++ - 如何测试 std::error_code 不是错误?

我有一个返回std::error_code的方法。我对错误消息不是特别感兴趣,只对方法是否成功感兴趣。测试std::error_code是否代表成功操作的最佳方法是什么? 最佳答案 我在使用ASIO库时遇到过类似的情况。作为什么oneoftheirblogposts建议,std::error_code应按如下方式进行测试:std::error_codeec;//...if(!ec){//Success.}else{//Failure.}深入挖掘后,我发现了this(最近)C++标准Google组中的讨论证实了上述说法,但也提出了关于

c++ - 消除 std::vector<std::string> 的列表初始化歧义

我的代码中有一个带有类型签名的重载函数:voidfoo(std::string);voidfoo(std::vector);我希望foo的用户能够使用字符串或字符串列表来调用它//Usecase1foo("str");//Usecase2foo({"str1","str2","str3"});foo({"str1","str2","str3","str4"});问题是当调用者将两个字符串传入foo的初始化列表时。//Problem!foo({"str1","str2"});这个对foo的调用是不明确的,因为它匹配两个类型签名。这是因为显然{"str1","str2"}是std::str

c++ - 创建内联 std::string

是否可以在不创建变量的情况下初始化std::string?我希望完成的事情:throwstd::runtime_error("Error:"+strerror(errno));我目前在做什么:std::stringerror="Error:";std::stringerrmsg(strerror(errno));throwstd::runtime_error(error+errmsg); 最佳答案 只是用其中之一做一个临时的:throwstd::runtime_error(std::string("Error:")+strerror

c++ - 获取 std::array 的底层数组的内存大小的最简单方法?

这是获取std::array::data()返回内容的内存大小的最简单/最短方法吗?arr.size()*sizeof(arr.value_type)编辑:我的问题不准确。“内存中的大小”是指数组中包含的所有元素(本身)的大小,例如它们是指向结构的指针,我只想要指针的大小,而不是指向的结构。我也不想包括std::arr实现的任何可能开销的大小。只是数组元素。有些人建议使用sizeof(arr)。这个:Whatisthesizeofstd::array?不同意。虽然它似乎可以在我的机器上工作,但我想知道标准保证是什么。 最佳答案 您可

c++ - 为什么 std::unique_lock 有默认构造函数?

我在看thistalk路易斯·布兰迪(LouisBrandy),当一位观众提出这个显而易见的问题时:Whydoesstd::unique_lockhaveadefaultconstructor?现在我必须知道。 最佳答案 unique_lock是可移动的。它有一个基本上是“空”的移出状态,不与任何互斥锁相关联。也可以通过调用release()来达到此状态。鉴于此状态的存在,以及拥有默认构造函数的好处(例如能够创建任意大小的动态数组),添加创建相同状态的默认构造函数是个好主意。 关于c++

c++ - constexpr 可变参数模板和解包 std::array

我想编写一个constexpr模板函数来置换作为参数传入的数组元素。所以我想出了这样的事情:templateconstexprstd::arraypermute(conststd::array&arr,conststd::array&permutation,Ts&&...processed){return(sizeof...(Ts)==N)?std::array{std::forward(processed)...}:permute(arr,permutation,std::forward(processed)...,arr[permutation[sizeof...(Ts)]]);}

c++ - 如何将 std::array<char, N> 转换为 char (&dest)[N]?

通过什么途径std::array到这样的功能:templatevoidsafe_func(char(&dest)[N]);?我试试这个:#includetemplateusingSafeArray=char[N];templatevoidsafe_func(char(&dest)[N]){}intmain(){SafeArraya1;safe_func(a1);std::arraya2;safe_func(*static_cast*>(static_cast(a2.data())));}它有效,但我怀疑,可能是我的Actor有问题,在其他编译器或平台上(我使用gcc/linux/amd

c++ - 为什么std::assoc_laguerre的第二个参数是unsigned int?

在C++17中,标准库中加入了很多特殊函数。一个功能是associatedLaguerrepolynomials.第二个参数需要一个unsignedint,但是mathematicaldefinition对实数也有效。有什么理由说它只限于非负整数吗?这仅仅是因为当n和k都是正整数时,二项式(n,k)更容易/更快/更简单地计算吗? 最佳答案 据我所知,C++特殊函数之父WalterE.Brown从未明确回答过您的拉盖尔问题。然而,当一个人读到whatBrowndidwrite,一个可能的动机变得清晰:Manyoftheproposed