给出以下代码,返回之前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()”构造是什么?我想更多地了解这个基本类型的构造,但似乎无法找到任何关于它的东西。这是初始化器,构造函数还是......?
谢谢!
答案 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;
这样的声明确实不满足这个标准!