基本类型的C++初始值设定项/构造函数
C++ initializer/constructor for basic types
给定以下代码,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;
这样的声明不符合这个标准!
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 构造函数正在调用一个使用当前类类型的函数
- 具有默认模板类型的默认构造函数的类型推导
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 不命名构造函数和析构函数上的类型错误
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 创建类类型的动态分配数组,其中类不得具有默认构造函数
- 有没有办法避免为 std::variant 类成员中的所有类型编写构造函数?
- 在 C++17 中调用具有不同参数类型的构造函数
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 无法推断类中的类型,构造函数采用 std::array
- 当类型适当的构造函数可用时,为什么一个编译器尝试使用已删除的副本构造函数
- 如何在参数中定义隐式类型转换的构造函数?
- C++ - 打印地图<结构,结构,构造函数>类型
- 继承构造函数+非默认构造函数类型的类内初始化失败
- c++ python构造函数类型错误(可能的命名空间问题)
- 具有构造函数类型转换和转换操作符的转换序列