簡體   English   中英

具有覆蓋簽名/未簽名的C ++自動

[英]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

由於您已經在使用armadillo,因此我認為最好(或最簡單)的方法是使用arma::sword

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

因為A.n_rows具有類型arma::uword ,這是arma::sword無符號版本,所以它將解決“該庫的不同版本,使用了不同的類型”的問題。 參見http://arma.sourceforge.net/docs.html#uword

您可以使用C ++ 11類型特征庫來獲取數字類型的帶符號無符號版本。

要獲取一個無符號整數:

std::make_unsigned<int>::type

因此,要獲得A.n_rows的簽名版本,請嘗試:

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

對於任何其他限定詞,都有相應的模板可以在類型之間進行轉換:

更改

auto x=A.n_rows-5;

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

為了拋棄未簽名的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM