[英]c++ auto with overriding signed/unsigned
在下面的代碼中:
#include <armadillo>
using namespace arma;
int main()
{
mat A;
auto x=A.n_rows-5;
....
x
是long 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.