Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lest_
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 94
#1

Int x(4); Что за объявление? - C++

08.07.2014, 19:15. Просмотров 338. Ответов 7
Метки нет (Все метки)

привет.
такой код компилируется и работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
int main()
{
    int a = 5;
    int x(4); // ???
 
    cout << x << endl;
    x = 12;
    cout << x << endl;
    
    char response; std::cin >> response; // для задержки экрана
                        
    return 0;     
}
строчка 7. что это за способ объявления переменной х? не нашёл ответа. подскажите кто нибудь
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2014, 19:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Int x(4); Что за объявление? (C++):

Что значит такое объявление typedef int (*A) ( )? - C++
typedef int (*A) ( ) Как его понять? Есть варианты ответа А. Объявление типа, что являет показатель за переменную типа int Б....

Правильное объявление переменной с точки зрения стиля [int *a vs int* a] - C++
И всё таки, как корректней объявлять переменные? 1. int* a, int&amp; a, int** a или 2. int *a, int &amp;a, int **a ?

Объявление массива int *arr почему так - C++
Объявление массива int *arr почему так, а не int arr, что означает *

Что означает эта строка? int _tmain(int argc, _TCHAR* argv[]) - C++
Всем привет, до этого пользовался DEV, решил пересесть на Visual Studio 2010 Express C++. С++ еще не изучал, хочу сначала добить &quot;С&quot;. ...

Что означает int pos = 0; int value = 5; в данном коде? - C++
#include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; void mass(int y); void main() { int y;

Что это такое int (*func4 (void)(int) - C++
Это примеры указателей на функцию. Понятно.void (*func1) (void *, int *); void (*func2) (int, int *); void (*func3) (void); А это что...

7
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
08.07.2014, 19:23 #2
Явный вызов встроенного конструктора по-умолчанию для типа int.
1
lest_
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 94
08.07.2014, 19:25  [ТС] #3
Цитата Сообщение от castaway Посмотреть сообщение
Явный вызов встроенного конструктора по-умолчанию для типа int.
так конструктор же для класса.
0
nmcf
5685 / 4996 / 1704
Регистрация: 14.04.2014
Сообщений: 20,387
08.07.2014, 19:59 #4
Это, наверное, из нового стандарта C++.
1
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
08.07.2014, 20:13 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от lest_ Посмотреть сообщение
что это за способ объявления переменной х?

Это одна из форм инициализации.

http://www.cplusplus.com/doc/tutorial/variables/
1
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
09.07.2014, 08:49 #6
Да нет, не из нового стандарта.
Для фундаментальных типов тоже существуют конструкторы.
1
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
09.07.2014, 22:20 #7
Цитата Сообщение от castaway Посмотреть сообщение
Для фундаментальных типов тоже существуют конструкторы.
Это тема очень скользкая и спорная. Рекомендую ознакомиться, если еще не видел. Мнение Бьярне присутсвует.

Цитата Сообщение от castaway Посмотреть сообщение
Явный вызов встроенного конструктора по-умолчанию для типа int.
Вот чего тут точно нет, так это вызова конструктора.
PS. извини, что вот так поправляю, но боюсь у ТС может сложиться неверное мнение о механизме.

lest_,
Вот такой вот С++, конструктор есть, а вызова нет.
Нигде в стандарте для встроенных типов конструкторы не описываются явно. Однако форма, обозначающая вызов конструктора для класса присутствует и для встроенных типов. Самый банальный ответ на "почему?" - для единообразия. В частности из-за шаблонов, в которых можно, например, так:
C++
1
2
3
4
5
template <typename T>
void foo()
{
    T a(7); //<-
}
Мы можем передать T = int, а можем T = MyClass. Если бы для типа int запись int(7) была невозможна, то подобный шаблон не имел бы смысла.
А еще можно так:
C++
1
2
3
4
    
    typedef int int_type;
    int a;
    a.~int_type();
И это тоже не значит, что деструктор действительно вызвался у типа int. Ответ на это все тот же. Единообразие и унификация.
В новом стандарте, кстати, по этому пути пошли дальше и ввели скобки {} как вид универсальной инициализации. Есть еще такое понятие - "синтаксический сахар", это когда какая-то синтаксическая конструкция заменяется на какой либо эквивалент для краткости или сохранения единого стиля. Так вот, это как раз оно.
3
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
10.07.2014, 00:31 #8
Цитата Сообщение от DrOffset Посмотреть сообщение
Вот такой вот С++, конструктор есть, а вызова нет.
Ну, Страуструп тут сам туману напустил. Сначала заявил, что отказался делать встроенные типы классами, а потом рассуждает об их конструкторах. Если тип не класс, то и конструктора у него быть не может. Ясно, что речь идет об эмуляции. Скажи он об этом прямо, и люди не мучились бы столь философскими вопросами.
1
10.07.2014, 00:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2014, 00:31
Привет! Вот еще темы с ответами:

int[][] или int[] - что быстрее? - C++
Везде вижу, что лучше использовать одномернный массив, а не двумерный. Всегда принимал это на правду, но сейчас задумался. Нужели умножение...

Объясните что делает int z(int a) - C++
вот весь исходный код #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;cmath&gt; using namespace std; int z(int a) { int x, y,...

В этой части кода происходит объявление функций? Что такое void? Что в скобках? - C++
В этой части кода происходит объявление функций? Что такое void? Что в скобках? void get(float **mas, int N, int M); void...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.