windows visual studio 2015,C++11 标准和 Armadillo 库
windows visual studio 2015, C++11 standard, and Armadillo library
我有一个使用 Armadillo 线性代数库(6.500.5 稳定版)的 Visual Studio Community 2015 项目(x64 解决方案平台),如果我尝试使用引入 C++ 的语法,它会收到构建错误11.文档指出 “使用 C++11 标准时,可以通过初始化列表设置 Mat、Col、Row 中的元素”。例如,如果我直接从 Armadillo 文档 describing element initialization、
中获取示例
// C++11
mat A = { {1, 3, 5},
{2, 4, 6} };
VS2015 产生错误,
Error C2440 'initializing': cannot convert from 'initializer list' to 'arma::Mat<double>'
相比之下,C++98示例编译没有错误:
// C++98
mat A;
A << 1 << 3 << 5 << endr
<< 2 << 4 << 6 << endr;
这当然让我怀疑 C++11 的兼容性是无效的,但在无数的 Visual Studio 项目属性中我找不到任何关于这样一个选项的东西,而且其他地方的网络搜索结果似乎表明 C++11 兼容性 是 从 2012 年开始出现在 Visual Studio 的版本中。使用 Armadillo 没有其他问题,并在 Linux (gcc 4.9.3) does 下测试 C++11 代码美好的。有没有人对此有任何了解,或者知道是否有一些隐藏的 VS2015 的 C++11 开关?
VS2015 中的 C++11 支持不完整。您可以通过在包含犰狳 header:
之前定义 ARMA_USE_CXX11 来强制告诉 Armadillo 使用 C++11 功能
#define ARMA_USE_CXX11
#include <armadillo>
(旁注:最新版本的 gcc 和 clang 是 C++11/C++14 更好的选择;您可以从 MinGW 项目获得 windows 的 gcc)。
我有一个使用 Armadillo 线性代数库(6.500.5 稳定版)的 Visual Studio Community 2015 项目(x64 解决方案平台),如果我尝试使用引入 C++ 的语法,它会收到构建错误11.文档指出 “使用 C++11 标准时,可以通过初始化列表设置 Mat、Col、Row 中的元素”。例如,如果我直接从 Armadillo 文档 describing element initialization、
中获取示例// C++11
mat A = { {1, 3, 5},
{2, 4, 6} };
VS2015 产生错误,
Error C2440 'initializing': cannot convert from 'initializer list' to 'arma::Mat<double>'
相比之下,C++98示例编译没有错误:
// C++98
mat A;
A << 1 << 3 << 5 << endr
<< 2 << 4 << 6 << endr;
这当然让我怀疑 C++11 的兼容性是无效的,但在无数的 Visual Studio 项目属性中我找不到任何关于这样一个选项的东西,而且其他地方的网络搜索结果似乎表明 C++11 兼容性 是 从 2012 年开始出现在 Visual Studio 的版本中。使用 Armadillo 没有其他问题,并在 Linux (gcc 4.9.3) does 下测试 C++11 代码美好的。有没有人对此有任何了解,或者知道是否有一些隐藏的 VS2015 的 C++11 开关?
VS2015 中的 C++11 支持不完整。您可以通过在包含犰狳 header:
之前定义 ARMA_USE_CXX11 来强制告诉 Armadillo 使用 C++11 功能#define ARMA_USE_CXX11
#include <armadillo>
(旁注:最新版本的 gcc 和 clang 是 C++11/C++14 更好的选择;您可以从 MinGW 项目获得 windows 的 gcc)。