gpt4 book ai didi

c++ - 如何为特征向量启用复制消除 move 成员?

转载 作者:行者123 更新时间:2023-11-30 01:19:03 24 4
gpt4 key购买 nike

move Eigen的支持was submitted in this patch in 2011 .但是我在 Matrix 头文件中找不到 move 构造函数。此外,Eigen 网页仍然具有列为 "to do" 的 move 语义。元素。这些都说明补丁还没有提交到release版本

此测试程序证明 move 构造函数保持 move 的对象不变

#include <iostream>
#include <utility>

#include <eigen3/Eigen/Dense>

int main()
{
Eigen::VectorXd first = Eigen::VectorXd::Constant(3, 3.14);
std::cout << "first\n" << first << std::endl << std::endl;
Eigen::VectorXd other = std::move(first);
std::cout << "first\n" << first << std::endl << std::endl;
std::cout << "other\n" << other << std::endl << std::endl;
return 0;
}

输出是:

first
3.14
3.14
3.14

first
3.14
3.14
3.14

other
3.14
3.14
3.14

如何在 Eigen 3.2.0. 中启用上述补丁中的复制消除 move 功能?

编辑:

Eigen 类的 move 语义似乎没有任何问题。但是只有默认 move 构造函数和 move 赋值运算符。

提供显式 move 构造函数和 move 赋值运算符的补丁尚未合并到发布版本中。

我想知道:

  1. 如何将此补丁应用于 Eigen 3.2.0?有没有工具或者我应该手动修改文件。

  2. 有没有人使用过这个补丁?

最佳答案

我不确定您为什么认为该功能已“完成”:尽管已提交补丁,但该错误显然仍未解决,根据您的经验,这表明该补丁尚未合并到 Eigen 源代码树中.

您的测试用例中也有一个错误:您似乎期望 first 在 move 后以某种方式“空”,但它会处于未指定的状态。尽管从补丁提交的快速浏览中确实可以看出人们可能会在实践中期待“空”结果,但补丁中没有足够的上下文来真正知道移出的对象将处于什么状态。所以,除非你有一些其他的信息来源,你的期望有点站不住脚。

关于c++ - 如何为特征向量启用复制消除 move 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21503220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com