基本类型的C ++初始化器/构造函数

时间:2014-01-09 02:53:01

标签: c++

给出以下代码,返回之前junk1指向函数末尾的内容是什么?

static void junkf(void)
{
   static const char s_char = char();
   const char *junk1 = &s_char;
   static const int s_int = int();
   const int *junk2 = &s_int;
}

(请注意,这是我从模板类中展开一个函数,根据声明替换“char”或“int”。我假设junk2指向一个零值的int - 正确吗?)

C ++语言中调用的“char()”或“int()”构造是什么?我想更多地了解这个基本类型的构造,但似乎无法找到任何关于它的东西。这是初始化器,构造函数还是......?

谢谢!

1 个答案:

答案 0 :(得分:4)

在函数结束时,junk1指向您告诉它指向的完全相同的内容 - s_char

由于junk1在函数结束时死亡,s_car是否超出此范围不属于任何有用的讨论。


根据评论略微重写问题:

const char c = char();  // what value does `c` have, and why?
const char* ptr = &c;   // what does `ptr` point to?

char()是一个包含匿名临时char构造的表达式。实例化具有空构造函数参数列表的类型执行值初始化(第8.5 / 10节)。 §8.5/ 7告诉我们,在值初始化期间,由于char不是类或数组类型,因此它将被初始化为零。

我们的c是从此临时值初始化的,因此它采用值0。这有效地导致ptr是一个零长度,以null结尾的C字符串。

char c;这样的声明确实满足这个标准!