c++14相关内容

C++11:正确的 std::array 初始化?

如果我按如下方式初始化 std::array,编译器会警告我缺少大括号 std::arraya = {1, 2, 3, 4}; 这解决了问题: std::arraya = {{1, 2, 3, 4}}; 这是警告信息: 'std::array::value_type [4] {aka int [4]}' [-Wmissing-braces] 的初始化器周围缺少大括号 这只是我的 gc ..
发布时间:2021-11-18 01:39:50 C/C++开发

如何使用数字索引转换 varadic std::tuple 的所有元素?

目前,我有一个这样的实现,以便使用一个函数 bar() 来转换元组的所有值,该函数接受元组的每个元素. templatevoid foo(const std::tuple&a){std::tuple转化元组 = std::make_tuple(bar(std::get(a))...);} 这样做的问题是,如果 Args 包含重复类型,这将不再起作用.因此,我想更改 std:: ..
发布时间:2021-09-16 19:00:02 C/C++开发

如何在编译时推断嵌套 std::vector 的内部类型?

前几天我问了一个非常类似问题 关于嵌套向量,但我遇到了另一个让我感到困惑的问题.我需要在编译时获取嵌套向量的最内层类型,以便我可以使用它作为模板参数传递. 例如,如果我有这个嵌套向量: std::vector>>v; 我需要一种提取 int 的方法,以便我可以调用一个函数,该函数采用嵌套向量并处理如下元素: foo(v); 除了问题是这个函数应该能够处理包含任何类型的任何深度的嵌套向 ..
发布时间:2021-09-04 20:41:08 C/C++开发

将自己的大小插入 std::map

我刚刚在我的代码 (C++14) 中遇到了一个奇怪的错误,这是由 std::map 的意外(至少对我而言)行为引起的.这是一个演示行为的简单示例: #include #include int main(){std::map米;for(int i = 0; i & e : m) {std::cout ..
发布时间:2021-08-30 19:05:49 C/C++开发

在 C++ Primer 5th edition shared_ptr<int> 中发现错误

嗨,我正在阅读 C++ 入门第 5 版,我想我在 shared_ptr 部分发现了一个错误.首先,我正在编写代码和他们给出的解释.然后我会写出我认为的错误以及我认为实际发生的事情.代码如下: shared_ptrp(new int(42));//引用计数为 1int *q = p.get();//好的:但不要以任何可能删除其指针的方式使用 q{//新区块开始shared_ptr(q);}//bl ..
发布时间:2021-07-23 20:32:14 C/C++开发

sfinae 远离一个破坏者

我正在实现与 std::vector 非常相似的东西,但在堆栈上使用数组而不是内存分配. d-tor 调用使用 SFINAE 的函数. 如果 value_type 是 POD,则函数体为空. 如果value_type是std::string这样的普通类,则该函数有一个主体并正确销毁所有数据. 现在,我希望能够使用这个新的 std::vector 作为 constexpr.然而, ..
发布时间:2021-07-23 19:45:14 C/C++开发

选择随机子集的通用算法实现

假设我们要从大小 n 的总集合中选择一个大小为 m 的随机子集.由于可以使用 S = {0, 1, 2, ..., (n - 1)} 中的唯一索引来标识总集中的每个元素.该问题相当于从 S 中随机选择 m 个不同的元素. 一个简单的算法是重复调用伪随机数生成器 rand 从 S 生成随机数.如果之前已经生成过数字,请再试一次.算法终止直到生成 m 个不同的数字.该算法的最优空间复杂度为O(1 ..
发布时间:2021-07-02 19:45:58 C/C++开发

在线程函数和普通函数中将 shared_ptr 传递给 weak_ptr 时的不同行为

我有一个线程函数,它需要一个 weak_ptr 并且我在线程函数中传递了我的 shared_ptr. 从法律上讲,weak_ptr 不应该增加 shared_ptr 的引用计数,但是,除非我使用 weak_ptr 进行类型转换,同时将其传递给线程函数,否则它会增加引用计数(意外) 此行为仅发生在线程函数中,而不发生在普通函数调用中. 这是线程函数的代码 void thrdfn( ..
发布时间:2021-06-04 20:12:35 C/C++开发

在C ++ 14中new和delete仍然有用吗?

考虑到 make_unique 和 make_shared 的可用性,以及 unique_ptr 和 shared_ptr 析构函数的自动删除功能,在C ++ 14中使用 new 和 delete 的情况(除了支持旧版代码的情况)是什么? 解决方案 尽管在许多情况下,智能指针优于原始指针,但 new /仍然有很多用例在C ++ 14中删除. 如果您需要编写任何需要就地构建的内容,例如 ..
发布时间:2021-05-03 19:04:40 C/C++开发

存储各种类型的对象之间的1:1关系:解耦和高性能

我有300多个课程.它们在某些方面是相关的. 为简单起见,所有关系均为1:1. 这是一个示例图. 编辑::我正在使用实体组件用于60fps游戏. 它是一个持久性数据库:用于游戏整个生命周期的单个实例. Edit2:所有关系都是弱关系,而不是 is-a 或强 std :: unique_ptr 所有权.(谢谢沃尔特) 母鸡 在笼子中. 某些 cages 不在任何 cag ..
发布时间:2021-04-28 19:53:37 C/C++开发

在lambda中使用静态方法时出错

我在 my_class 中有一个 static 方法 my_method_1(),并且我试图在lambda中使用它: static void my_method_1(el);无效的my_class :: my_method_2(){std :: for_each(my_list_.begin(),my_list_.end(),[](自动元素){my_method_1(element);});} ..
发布时间:2021-04-20 18:57:38 C/C++开发

使线程C2672和C2893错误代码(c ++)

我在编译此代码时遇到麻烦,收到以下消息: C2672'std :: invoke':找不到匹配的重载函数 C2893无法专用于功能模板'unknown-type std :: invoke(_Callable&&,_ Types& ...)noexcept()' 静态自动f = [](int偏移量,int步长,std :: vector&顶点,const变换& tran ..
发布时间:2021-04-20 18:57:34 C/C++开发

计算用户按下按钮的频率的函数

我有一个功能.下面是一个原型 void onNewButtonPress(int64_t nanoseconds_timestamp,int32_t user_id); 有点杂乱无章.每当具有user_id的用户按下按钮时,都会调用此函数.其中nanoseconds_timestamp参数是自纪元以来的时间(以纳秒为单位) 此功能将需要获取用户按下按钮的速率,基本上是用户每秒按下一次 ..
发布时间:2021-04-20 18:57:28 C/C++开发

仅对某些类型使用enable_if专门化功能的最佳方法

我有这段代码专门用于两种类型的打印功能,并且对于其他任何类型都恢复为基本版本. 我的问题是,有没有办法在基本打印功能的enable_if中为所有专用版本键入否定大小写的方法? 即有没有办法删除所有!std :: is_same 并且仍然具有明确的打印功能? 欢迎使用任何版本的C ++,但可以在c ++ 14中使用的版本会有所帮助. #includetem ..
发布时间:2021-04-20 18:57:25 C/C++开发