Khu*_*dov 7 c++ static-assert decltype constexpr c++11
为什么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
Run Code Online (Sandbox Code Playgroud)
decltype(entity)指定entity此表达式指定的声明类型.
由于constexpr(对象声明中使用的constexpr说明符暗示const),您的cv变量属于类型const uint16_t.
你知道那const uint16_t与uint16_t你的行不同:
static_assert( std::is_same< uint16_t, decltype(cv)>::value, "!");
Run Code Online (Sandbox Code Playgroud)
失败,因为这是预期的.
这条线
constexpr uint16_t foo(){ return 0;}
Run Code Online (Sandbox Code Playgroud)
指定foo可以在编译时计算函数,但函数仍返回a uint16_t.这就是为什么上线
auto v = foo();
Run Code Online (Sandbox Code Playgroud)
v是类型uint16_t然后线
static_assert( std::is_same< uint16_t, decltype(v) >::value, "!");
Run Code Online (Sandbox Code Playgroud)
也按预期工作.
| 归档时间: |
|
| 查看次数: |
1408 次 |
| 最近记录: |