c++ 自动覆盖 signed/unsigned

c++ auto with overriding signed/unsigned

在下面的代码中:

#include <armadillo>

using namespace arma;

int main()
{
    mat A;
    auto x=A.n_rows-5;
    ....

xlong long unsigned int,我希望它是 long long int。我该如何解决这个问题?

需要注意的是,在这个库的不同版本上,使用了不同的类型,所以我不能直接提到long long int,我需要使用auto

改变

auto x=A.n_rows-5;

long long int x = (long long int)(A.n_rows - 5);

为了抛弃unsigned.

您可以使用 C++11 类型特征库来获取数字类型的 signed or unsigned 版本。

获取无符号整数:

std::make_unsigned<int>::type

因此,要获得 A.n_rows 的签名版本,请尝试:

std::make_signed<decltype(A.n_rows)>::type x = A.n_rows - 5;

对于任何其他限定符,都有相应的模板可以在类型之间进行转换:

由于您已经在使用犰狳,我认为最好(或最简单)的方法是使用 arma::sword

sword x = A.n_rows - 5; // This can also compile without C++11.

它将解决 "different versions of this library, different types have been used" 的问题,因为 A.n_rows 的类型是 arma::uword,它是 arma::sword 的无符号版本。看,http://arma.sourceforge.net/docs.html#uword