为什么可以分开位数与C中的撇号++但不C 1

时间:2019-01-30 18:28:19

标签: c++ c

我看到这个矢量声明一个代码示例中

std::vector<double> v(10'000'007, 0.5);

产生大小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'

这风格使得它更容易阅读的声明,但没有真正加入到C ++的规则,使这个编译?

1 个答案:

答案 0 :(得分:7)

在C ++ 14中,更新了整数常量以允许使用可选的'分隔符。

请参阅[lex.icon]

  

十进制文字
    非零位数
    小数 opt

因此,您显示的代码段将无法在C ++ 14以下的任何C ++标准中进行编译,并且C语言还没有此规则。