簡體   English   中英

基本類型的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相同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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM