gpt4 book ai didi

c++ - decltype(constexpr 变量)

转载 作者:可可西里 更新时间:2023-11-01 18:28:19 26 4
gpt4 key购买 nike

为什么 constexpr 变量的 decltype 失败?

#include <cstdint>
#include <type_traits>

constexpr uint16_t foo(){ return 0;}

constexpr auto cv = foo();
auto v = foo();

static_assert( std::is_same< uint16_t, decltype(cv)>::value, "!"); // failed

static_assert( std::is_same< uint16_t, decltype(v) >::value, "!"); // success

最佳答案

decltype(entity)指定此表达式指定的实体的声明类型。

由于 constexpr ,(对象声明中使用的 constexpr 说明符暗示 const),您的 cv 变量的类型为 const uint16_t.

你知道 const uint16_t 不同于 uint16_t 那么你的行:

static_assert( std::is_same< uint16_t, decltype(cv)>::value, "!");

按预期失败。


线

constexpr uint16_t foo(){ return 0;}

指定函数 foo 可以在编译时求值,但函数仍然返回 uint16_t。那为什么就行了

auto v  = foo();

vuint16_t 类型,然后是行

static_assert( std::is_same< uint16_t, decltype(v) >::value, "!");

也按预期工作。

关于c++ - decltype(constexpr 变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18670518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com