相关疑难解决方法(0)

C vs C++中的Const正确性

我理解const正确性意味着什么,而我的问题不在于const正确性是什么.所以我不期待一个解释或C++ - FAQ链接.

我的问题是:

  • constC和constC++ 之间的语义差异是什么?
  • 差异的原因是什么?

从各自的标准中得出差异的报价将是很好的.

我经常在C和C++之间切换,我想知道在这样做时应该记住的重点.

我似乎不记得这些的原因(特别感谢你能提供一个推理)但是从我的头脑中,我记得:

  • C++中的const变量默认具有内部链接,而在C中它们具有默认的外部链接;
  • const对象可以在C++中用作编译时值,但不能在C中用作编译时值;
  • 字符串文字的指针必须是char const*C++中的,但在C中它可以是char*.

我错过了什么?

c c++ const

59
推荐指数
3
解决办法
1万
查看次数

初始化固定大小的char数组时没有编译器错误,没有足够的空间用于null终止符

假设我有以下c char数组:

char okaysize4[5] = "four";   // line 5
char toosmall4[4] = "four";   // line 6
char toosmall3[3] = "four";   // line 7
Run Code Online (Sandbox Code Playgroud)

当我使用gcc 4.4.7编译时,我收到以下错误:

array.c:7:警告:chars数组的初始化字符串太长

第7行预计会出现此错误,因为我试图将5个字符填充("four" + \0)到3个元素数组中.第5行也没有错误,因为5元素数组足够大.

然而,我很惊讶第6行没有类似的错误.最终初始化的toosmall4是未终止的字符串,这可能会导致各种麻烦.

我的理解是"four",由于null终止符,c字符串文字应该是五个字符长.实际上sizeof("four")是5.那么为什么编译器不会在这里给出错误?

有没有什么方法可以改变我的声明/定义/初始化,以便在这种情况下标记错误?

c arrays compiler-errors initialization char

14
推荐指数
2
解决办法
1282
查看次数

标签 统计

c ×2

arrays ×1

c++ ×1

char ×1

compiler-errors ×1

const ×1

initialization ×1