Windows Visual Studio 2015、C++11 标准和 Armadillo 库

Posted

技术标签:

【中文标题】Windows Visual Studio 2015、C++11 标准和 Armadillo 库【英文标题】:windows visual studio 2015, C++11 standard, and Armadillo library 【发布时间】:2016-03-06 23:36:18 【问题描述】:

我有一个使用 Armadillo 线性代数库(版本 6.500.5 稳定版)的 Visual Studio Community 2015 项目(x64 解决方案平台),如果我尝试使用引入 C++11 的语法,则会收到构建错误。文档指出“使用 C++11 标准时,Mat、Col、Row 中的元素可以通过初始化列表设置”。例如,如果我直接从犰狳文档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++从 2012 年起,Visual Studio 版本中存在 11 兼容性。使用 Armadillo 没有其他问题,并且在 Linux (gcc 4.9.3) 下测试 C++11 代码确实工作正常。有没有人对此有任何见解,或者知道 VS2015 是否有一些隐藏的 C++11 开关?

【问题讨论】:

【参考方案1】:

VS2015 中的 C++11 支持不完整。您可以通过在包含犰狳标头之前定义 ARMA_USE_CXX11 来强制告诉犰狳使用 C++11 功能:

#define ARMA_USE_CXX11
#include <armadillo>

(旁注:最新版本的 gcc 和 clang 是 C++11/C++14 更好的选择;您可以从 MinGW 项目获得 gcc for windows)。

【讨论】:

解决了! ...感谢您的快速响应。干杯//罗尔夫

以上是关于Windows Visual Studio 2015、C++11 标准和 Armadillo 库的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 远程调试 - MSVCP140.dll 丢失

Visual Studio2015 Nuget安装OpencvSharp包

visual studio2019的安装以及使用

在Visual Studio上开发Node.js程序

在 Visual Studio 2012 / 2013 中使用 SSIS BIDS

如何将 SQL 报告项目 (rptproj) 升级到 Visual Studio 2012?