2014-01-09 4 views
1

Учитывая следующий код, на что указывает junk1 в конце функции перед возвратом? .Инициализатор/конструктор C++ для базовых типов

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; 
} 

(Обратите внимание, что это мое разворачивание функции из шаблона класса, который заменяет «символ» или «Int», согласно декларации, я предполагаю, что junk2 указует на междунар с нулевым значением - правильно ?)

Что такое конструкция char() или int(), которая называется на языке C++? Я хочу узнать больше об этой конструкции для базовых типов, но не могу найти ничего об этом. Является ли это инициализатором, или конструктором, или ...?

Спасибо!

+1

http://en.cppreference.com/w/cpp/language/value_initialization –

ответ

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) & dagger;. § 8.5/7 говорят нам, что во время инициализации значения, поскольку char не является типом класса или массива, он будет инициализирован нулем.

Наш c инициализирован из этого временного, поэтому он принимает значение 0. Это приводит к тому, что ptr является строкой C с нулевой длиной.

& dagger; Декларация типа char c; делает не удовлетворяет этому критерию!

+0

Мой первый вопрос, возможно, был лучше сформулирован как вопрос о том, что находится в s_char после инициализации. Я предполагаю, что инициализация значения char() является байтом NUL (0), поэтому junk1 на практике указывает на пустую строку. Мой второй вопрос был более важным, и спасибо @pepper_chico за ответ на это! –

+0

@MarkLudwig: Так что действительно вопрос должен быть 'const char c = char(); const char * ptr = & c; // что указывает ptr??? –

+0

Правильно, для этого вопроса персонаж не обязательно должен быть статичным. Мой пример был взят из некоторого кода, который я нашел (где переменная является и должна быть статичной по причинам, связанным с конфликтом). Я пытаюсь добавить C++ в список свободных языков, и это форма инициализации значения для основных типов, на которые я пытаюсь сосредоточиться здесь: какое значение хранится в c? Указатель интересен только потому, что он передается в функции, которые предполагают, что он указывает на строку с нулевым завершением. Какова стоимость, предоставляемая всеми формами инициализации значений для всех типов данных? Думаю, они поставляют 0 с. –

Смежные вопросы