[英]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
相同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
為零長度,以零結尾的C字符串。
†像char c;
的聲明char c;
不符合這個標准!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.