基本类型的C++初始值设定项/构造函数

C++ initializer/constructor for basic types

本文关键字:构造函数 类型 C++      更新时间:2023-10-16

给定以下代码,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()"结构是什么? 我想了解有关基本类型的这种结构的更多信息,但似乎找不到有关它的任何信息。 这是初始值设定项、构造函数还是...?

谢谢!

在函数结束时,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;这样的声明不符合这个标准!

相关文章: