【问题标题】:signed int vs int - is there a way to tell them apart in C++? [duplicate]有符号的 int 与 int - 有没有办法在 C++ 中区分它们? [复制]
【发布时间】:2018-11-05 18:35:38
【问题描述】:

是否有模板或方法可以用来区分声明 signed intint,如下例所示

signed int foo;
int bar;
static_assert(magic_signed<decltype(foo)>::value,"signed"); //PASS
static_assert(magic_signed<decltype(bar)>::value,"not signed"); //ASSERT

【问题讨论】:

  • int 默认为signed
  • 是否有意在声明中将其称为bar,然后用作baar
  • @Blaze - 感谢指点,已修复
  • 我的信念是不可能的。编译后,你无法区分“int”和“signed int”,它们是一样的。
  • 在这方面,char 很奇特:char 是有符号还是无符号由实现定义,但它与 signed charunsigned char 是不同的类型。对于其他整数类型,signed TT 的类型相同。

标签: c++ templates typetraits signed


【解决方案1】:

尽管signed intint 相同,但我认为您可能的意思是如何区分unsigned intint。看看std::is_signed。 c++11后可用。

https://en.cppreference.com/w/cpp/types/is_signed

还有一个std::is_unsigned

https://en.cppreference.com/w/cpp/types/is_unsigned

如果你真的想区分signed int 和普通int,我认为你不能,因为int 被编译器隐式理解为意味着signed int,所以它们实际上是完全相同的东西。

也看看这个。 Difference between int and signed int declaration

【讨论】:

  • 我知道如何区分 unsigned int 和 int 与 std::is_signed
  • 好吧,就像我说的,signed 和 normal int 之间没有区别,所以区分两者没有真正意义。
【解决方案2】:

intsigned intsigned 是同一类型。

unsigned intunsigned 是同一类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-25
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多