ar2*_*015 3 c++ templates armadillo c++11
我定义了一个犰狳矩阵,并尝试根据其手册通过初始化列表来初始化它。
\n\n除非我尝试定义列矩阵,否则没问题。
\n\n为什么是暧昧呢?
\n\n#include <armadillo>\n\nint main()\n{\n // ok : square matrix\n arma::mat A={{1.0,2.0},{3.0,4.5}};\n\n // ok: row matrix\n arma::mat B={3.5,4.0};\n\n // error: conversion from \xe2\x80\x98<brace-enclosed initializer list>\xe2\x80\x99 to \n // \xe2\x80\x98arma::mat {aka arma::Mat<double>}\xe2\x80\x99 is ambiguous\n arma::mat C={{3.5},{4.0}};\n\n // ok: column matrix\n arma::mat D=arma::mat({3.5,4.0}).t();\n\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n
这是 C++11/14 标准的问题。因为每个内部集合中只有一个元素,所以该标准本质上说{{3.5},{4.0}}也可以解释为{3.5,4.0}。换句话说,{3.5}可以隐式转换为double(3.5). 这导致两个构造函数之间存在歧义。
一种可能的解决方案是使用犰狳列向量构造函数:
arma::mat C = arma::colvec( {3.5, 4.0} );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2823 次 |
| 最近记录: |