c++14相关内容

没有<可选>在 MS Visual Studio 2013 中 - 该怎么做?

我想使用 std::experimental::optional,但 MSVS 2013 告诉我它找不到标题. 为什么它不在那里? 我可以根据其他地方的代码推出自己的代码吗?也许是 C++14 提案? 解决方案 std::experimental::optional 源自 Boost.Optional 库,该实现在 Visual C++ 12.0 中运行良好(尽管它有所不同 一点) ..

来自 std::promise 的未知异常

下面的代码有什么问题?运行时程序因未知异常中止 #include #include int main() {自动承诺 = std::promise{};auto future_one = promise.get_future();promise.set_value(1);返回0;} 错误输出为 在抛出'std::system_error'的实例后调用终止what(): 未知错误 -1 ..
发布时间:2021-12-29 10:24:54 C/C++开发

如何使用`asio::ip::tcp::iostream`避免数据竞争?

我的问题 在使用两个线程通过 asio::ip::tcp::iostream 发送和接收时,如何避免数据竞争? 设计 我正在编写一个使用 asio::ip::tcp::iostream 进行输入和输出的程序.该程序通过端口 5555 接受来自(远程)用户的命令,并通过相同的 TCP 连接向用户发送消息.因为这些事件(从用户接收的命令或发送给用户的消息)是异步发生的,所以我有单独的 ..
发布时间:2021-12-28 12:52:40 C/C++开发

如何让 CMake 基于 GCC 版本通过 std=c++14/c++1y 或 c++17/c++1z?

GCC 4.x 不接受 C++14 代码的 --std=c++14 开关 - 它需要 --std=c++1y 代替.更高版本采用 --std=c++1z 但(可能)不是 --std=c++17 尚未设置(在 2016 年编写).也许 C++11 也有类似的问题. CMake 是否有一些工具(也许作为一个模块)来根据 GCC 版本传递正确的开关? 解决方案 当想要指定特定的 C++ 版 ..
发布时间:2021-12-26 22:10:50 C/C++开发

使用“实验/文件系统"构建项目;使用 cmake

我需要在我的项目中添加一个“实验/文件系统"头 #include int main() {自动路径 = std::experimental::filesystem::current_path();返回0;} 所以我使用了 -lstdc++fs 标志并与 libstdc++fs.a 链接 cmake_minimum_required(VERSION 3.7)项目(testcpp)设置(CMAK ..
发布时间:2021-12-26 21:52:59 C/C++开发

将不可复制的闭包对象传递给 std::function 参数

在 C++14 中,lambda 表达式可以通过使用捕获初始值设定项从变量中移动来捕获变量.然而,这使得生成的闭包对象不可复制.如果我有一个接受 std::function 参数的现有函数(我不能改变),我不能传递闭包对象,因为 std::function 的构造函数要求给定的函子是 CopyConstructible. #include #include void doit(std::func ..
发布时间:2021-12-23 22:38:30 C/C++开发

c++ lambdas 如何从上层范围捕获可变参数包

我研究了通用 lambda 表达式,并稍微修改了示例,所以我的 lambda 应该捕获上层 lambda 的可变参数包.所以基本上什么是给上层 lambda 的 (auto&&...) - 应该以某种方式在 [=] 块中捕获. (完美转发是另一个问题,我很好奇这里有可能吗?) #include #include#include//基本情况void doPrint(std::ostream& ..
发布时间:2021-12-23 22:22:02 C/C++开发

C++14 中的递归 lambda 函数

在 C++11 中编写递归 lambda 函数有一个经常重复的“技巧",如下所示: std::function阶乘;factorial = [&factorial](int n){ 返回 n (例如 C++0x 中的递归 lambda 函数.) 尽管这种技术有两个直接的缺点:std::function 对象的目标被绑定(通过引用捕获)到一个非常特殊的 std::function 对象( ..
发布时间:2021-12-23 22:19:05 C/C++开发

泛型 lambda 的数量

可以通过访问它的 operator() 来推断非泛型 lambda 的 arity. template struct fInfo : fInfo{ };模板 struct fInfo{ static const int arity = sizeof...(Args);}; 这对于 [](int x){ re ..
发布时间:2021-12-23 22:03:39 C/C++开发

如何立即调用 C++ lambda?

来自我继承的类的构造函数需要传入一个非平凡的对象.类似于: MyFoo::MyFoo() : SomeBase( complexstuff ){返回;} complexstuff 与 MyFoo 关系不大,所以我不想传入. 我没有编写某种返回 complexstuff 的 1-off 临时函数,而是使用了 lambda.我花了几分钟才弄清楚我必须调用 lambda.所以我的代码现在看起来 ..
发布时间:2021-12-23 21:59:59 C/C++开发

为什么在未计算的操作数中不允许使用 lambda 表达式,但在常量表达式的未计算部分中允许使用 lambda 表达式?

如果我们查看 草案 C++ 标准 部分 5.1.2 Lambda 表达式 段落 2 说(强调我的未来): 对 lambda 表达式的求值产生一个 prvalue 临时值 (12.2).这个临时对象称为闭包对象.lambda 表达式不得出现在未计算的操作数中(第 5 条).[注意:闭包对象的行为类似于函数对象(20.8).-尾注] 和部分 5.19 常量表达式 段落 2 说: 条件表达 ..
发布时间:2021-12-23 21:59:15 C/C++开发

在 lambda 中捕获完美转发的变量

templatevoid doSomething(T&& mStuff){auto lambda([&mStuff]{ doStuff(std::forward(mStuff)); });拉姆达();} 使用 &mStuff 语法捕获完美转发的 mStuff 变量是否正确? 或者对于完美转发的变量是否有特定的捕获语法? 编辑:如果完美转发的变量是参数包怎么办? 解决方案 ..
发布时间:2021-12-23 21:57:49 C/C++开发

Lambda 捕获作为常量引用?

是否可以通过 lambda 表达式中的 const 引用来捕获? 我希望下面标记的作业失败,例如: #include #include 使用命名空间标准;int main(){字符串字符串[] ={“你好",《世界》};静态常量 size_t num_strings = sizeof(strings)/sizeof(strings[0]);string best_string = "foo ..
发布时间:2021-12-23 21:57:23 C/C++开发

为什么在 C++14 中使用 std::bind 而不是 lambdas?

在 C++11 之前,我经常使用 boost::bind 或 boost::lambda.bind 部分成为标准库(std::bind),另一部分成为核心语言(C++ lambdas)的一部分,并大量使用 lambdas更轻松.现在,我几乎不使用 std::bind,因为我几乎可以用 C++ lambda 做任何事情.我能想到的 std::bind 有一个有效的用例: struct foo{模板 ..
发布时间:2021-12-23 21:44:25 C/C++开发

如何从捕获移动的 lambda 表达式创建 std::function?

我正在尝试从捕获移动的 lambda 表达式创建一个 std::function.请注意,我可以毫无问题地创建一个移动捕获 lambda 表达式;只有当我尝试将它包装在 std::function 中时,我才会收到错误. 例如: auto pi = std::make_unique(0);//这里没有问题!自动 foo = [q = std::move(pi)] {*q = 5;std:: ..
发布时间:2021-12-23 21:43:31 C/C++开发