为什么我可以用C++中的撇号来分隔数字而不是C?

tow*_*ele -1 c c++

我在代码示例中看到了这个向量声明

std::vector<double> v(10'000'007, 0.5);
Run Code Online (Sandbox Code Playgroud)

它生成一个大小为10000007的向量,因此必须将其强制转换为size_type.我也可以将它分配给一个类型的变量,size_t这并不奇怪.同样的声明不能在C中编译,但是,我收到一个错误

#include <stdio.h>
void main()
{
unsigned x = 10'000'007;
printf("x: %d\n", x);
}

warning: multi-character character constant [-Wmultichar] unsigned x = 10'000'007;
error: expected ‘,’ or ‘;’ before '\x303030'
Run Code Online (Sandbox Code Playgroud)

这种风格使得阅读声明变得更容易,但实际上是否有一条规则添加到C++中进行编译?

And*_*dyG 7

在C++ 14中,更新了整数文字以允许可选的'分隔符.

参考[lex.icon]

decimal-literal:
   非零位
   十进制文字的opt数字

因此,您显示的代码片段不会在C++ 14下面的任何C++标准中编译,并且C语言还没有这个规则.

  • "然而"听起来相当乐观.是否有任何建议将此添加到C? (2认同)
  • 我很惊讶你已经回答了这个问题.C&C++是具有各自语法和语义的不同语言.所以我将扩展这个问题:D,C#,ADA和Prolog怎么样? (2认同)