You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何编写int16_t类型的字面常量?

问题

在使用std::max或std::min时,如果传入字面常量和int16_t变量,编译器会报错:

error: no matching function for call to 'min(int16_t&, int)'

示例代码:

int16_t my_var {100};
std::cout << std::min( my_var, 1 );

已知以下几种写法可解决问题,但都略显繁琐:

  • std::min<int16_t>( my_var, 1 );
  • std::min( my_var, int16_t( 1 ) );
  • std::min( static_cast<int>( my_var ), 1 );

想知道是否存在编写int16_t类型字面常量的方法,期望能像处理其他整数类型那样简化写法:

std::min( my_var, 1i );
// 或者
std::min( my_var, 1s );

就像处理其他整数类型时的常规写法:

std::min( ulong_var, 1u );
std::min( ll_var, 1ll );
解答

C++标准并没有提供原生的int16_t字面量后缀(比如1i或1s这类),标准仅定义了u/U(无符号型)、l/L(长整型)、ll/LL(长长整型)等基础整数类型的后缀。

如果想要类似的简化写法,可以自定义用户字面量实现:

#include <cstdint>

constexpr int16_t operator""_s(unsigned long long n) noexcept {
    return static_cast<int16_t>(n);
}

之后就可以这样使用:

int16_t my_var {100};
std::cout << std::min( my_var, 1_s );

注意自定义字面量的后缀不要用单个i或s(这类属于标准预留后缀范围,可能和未来标准扩展冲突),推荐加上下划线区分,比如_s或_i16。

如果不想自定义字面量,也可以用std::int16_t{1}这种初始化方式,比int16_t(1)稍微简洁一点,但本质还是显式类型转换。

内容的提问来源于stack exchange,提问作者Leon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:04:53