C++23: std::size_t 字面值常量

为什么?

举例:

#include 
#include 
int main(){
    std::vector vec{1, 2, 3};
    for(auto i = 0; i

编译结果:

: In function 'int main()':
:8:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    8 |     for(auto i = 0; i

或者,我们将for(auto i = 0; i改成for(auto i = 0, s = vec.size(); i,得到编译结果

: In function 'int main()':
:8:9: error: inconsistent deduction for 'auto': 'int' and then 'long unsigned int'
    8 |     for(auto i = 0, s = vec.size(); i:8:38: warning: comparison of integer expressions of different signedness: 'int' and 'long unsigned int' [-Wsign-compare]
    8 |     for(auto i = 0, s = vec.size(); i

第一种编译结果只是类型不匹配,第二种编译结果是auto自动推导出错。这给我们日常的编程工作带来一些不便。

怎么办?

这里借用cppreference的例子:

static_assert(std::is_same_v);
static_assert(std::is_same_v>);

对于符号的std::size_t,使用z或者Z作为后缀。
对于符号的std::size_t,使用zZuU的集合,即uzuZUz或者UZ

你可能感兴趣的:(C++23: std::size_t 字面值常量)