【问题标题】:How to use auto keyword to assign a variable of type uint32_t or uint64_t in C++如何在 C++ 中使用 auto 关键字分配 uint32_t 或 uint64_t 类型的变量
【发布时间】:2019-01-08 16:40:18
【问题描述】:

考虑auto var = 5u;。在这里,我使用了后缀u,这样var就会被推导出为unsigned int。有没有办法为uint32_tuint64_t 类型实现类似的东西? C++11或C++14有后缀吗?

【问题讨论】:

  • 不,没有这样的东西。拼出类型是您的选择。或者定义你自己的文字。
  • 如果您确切知道自己想要什么类型,为什么要使用 auto?

标签: c++11


【解决方案1】:

我假设您正在使用 Herb Sutter 建议的 AAA style

在这种情况下,一个不错的解决方案是简单地编写:

auto variable_name = uint64_t{ 5000000000 };

这是清晰的、一致的、明确的类型,不需要讨厌的 C 预处理器。


编辑:如果您想在使用文字时绝对确定,可以将an appropriate suffix 添加到整数文字以确保足够大的范围,同时仍显式键入变量。

【讨论】:

  • 尝试一个大于2^32的初始化器。
  • @MaximEgorushkin 文字可以自动上升到long long int,但unsigned long long int 确实需要u 后缀。
  • 投反对票的人会评论解释吗?我相信这显然适用于 32 位范围之外的数字。
  • 我认为投反对票是因为根本不使用 auto 更容易(打字更少)。
  • @nate 可能是真的,但我的回答并不是提倡这种风格,它只是回答关于这种风格的问题
【解决方案2】:

你总是可以定义你自己的后缀

#include <cstdint>
#include <type_traits>

uint32_t operator ""_u32 (unsigned long long v) { return uint32_t (v); } 

int main ()
{
    auto v = 10_u32;

    static_assert (std::is_same <decltype (v), uint32_t>::value);
}

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2011-03-26
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多