Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/48: Рейтинг темы: голосов - 48, средняя оценка - 4.81
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826

Инициализация статического поля

29.03.2016, 16:44. Показов 10520. Ответов 72
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день,

как объяснить необходимость объявить все статические поля, даже те у которых есть конструктор по умолчанию, вне класса до main. Почему код ниже компилятор не может сам всё порешать в 2016-ом году?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
 
struct Foo
{
   static int x;
};
int Foo::x;
 
int main()
{
   Foo::x;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2016, 16:44
Ответы с готовыми решениями:

Инициализация статического массива
Добрый вечер! Допустим, что имеется класс class A { .... public: static int array; .... }; Как инициализировать массив в...

Инициализация статического массива
Ребята, помогите пожалуйста. Не получается проинициализировать NULL-ами статиеский массив указателей. Пишет слудеющее (прикрепил скриншот)....

Инициализация в классе статического объекта класса :)
Добрый день! Огромное спасибо за ваше внимание! Помогите разобраться с такой проблемой. Есть чисто статический класс (не нужен его объект...

72
30.03.2016, 20:01
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
тогда вы в курсе,
что шаблоно код целиком и полностью живет в хедерах.
Риторический вопрос: разве шаблонокод не может жить и использоваться только в cpp?
Не придираюсь. Просто поправка.

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.03.2016, 20:03
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Да в том то и дело что ничего он не знает. Поэтому для того чтобы шаблоны слинковать либо начинает фантазировать либо статик этот не совсем статик.
ну то есть, на практике все отлично работает.
однако, "он ничего не знает" и "фантазирует".

мне иногда хочется спросить:
люди, вы свои академ-теории вообще хоть как то с реальной практикой состыковываете?

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вот это и есть криво. Линкер должен не копии объединять а искать коллизии имен.
1.
а вам не все ли равно, как свой личный геммор будет разруливать линкер?

2.
студийный выкидывает лишние копии.
он ничего не объединяет.
он убирает лишнее.
очевидно, что для этого он должен найти коллизии.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
30.03.2016, 20:05
Цитата Сообщение от hoggy Посмотреть сообщение
реализация на усмотрении разработчиков компилятора.
Другими словами - Берн в свое время толкового решения не нашел, а пошаблонить хотел, а теперь разгребайте недоделку кто во что горазд.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
а вам не все ли равно, как свой личный геммор будет разруливать линкер?
Если линкер перестанет искать коллизи то начнется конкретнейший гемморой у разработчика, связанный с тем что непонятно что откуда читается и какая именно функция вызывается
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.03.2016, 20:05
Цитата Сообщение от castaway Посмотреть сообщение
Риторический вопрос: разве шаблонокод не может жить и использоваться только в cpp?
Не придираюсь. Просто поправка.
может.
но я не рассматриваю этот кейс,
потому что в разрезе темы он не имеет смысла.

ограничения статических членов класса связаны с "многофайловостью" проекта.
поэтому, рассматривать эту проблему нужно тоже
в разрезе "множества ед. трансляций".
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
30.03.2016, 20:23
Цитата Сообщение от hoggy Посмотреть сообщение
ну то есть, на практике все отлично работает.
однако, "он ничего не знает" и "фантазирует".
Цитата Сообщение от hoggy Посмотреть сообщение
потом линкер повыкидывает все, кроме одной.
Вот это и называется - фантазирует.

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
вы свои академ-теории вообще хоть как то с реальной практикой состыковываете
Ну надеюсь понимаете что понимание того что и как происходит в компиляторе и линкере оно не из воздуха взялось, а из опыта разработки оных. Даже если не для С++ и с компиляцией не в машкод, принцип от этого не меняется. Давно это правда было каомпиляторы скриптов всяких. Сейчас практика немного другая, типа импорта из промышленных CAD вот таких вот моделек:

и изобретание велосипеда по поводу того как на основе дерева узлов модели построить дерево вычисления коллизий и т.п

Миниатюры
Инициализация статического поля  
0
30.03.2016, 20:23

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
но я не рассматриваю этот кейс,
потому что в разрезе темы он не имеет смысла.
Нет вопросов.

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.03.2016, 21:35
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вот это и называется - фантазирует.
допустим. ну и что?
у вас какие то проблемы с этим?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ну надеюсь понимаете что понимание того что и как происходит в компиляторе и линкере оно не из воздуха взялось,
мне не понятно, зачем вы на этом заостряетесь.

это - трудности компилятора/линкера.

какая вам разница, как они сделают вам "хорошо" ?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
30.03.2016, 21:39
Цитата Сообщение от hoggy Посмотреть сообщение
какая вам разница, как они сделают вам "хорошо"
вопрос в том что если он начнет тотально сшивать совпадающие символы вместо того чтобы искать коллизии то это уже будет не "хорошо" а "очень плохо". Не факт что при использовании статиков в шаблонах это "очень плохо" нигде ни у кого не вылазет, даже если ни я ни вы не сталкивались с тем чтобы оно вылезло.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.03.2016, 21:47
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
вопрос в том что если он начнет тотально сшивать совпадающие символы вместо того чтобы искать коллизии то это уже будет не "хорошо" а "очень плохо". Не факт что при использовании статиков в шаблонах это "очень плохо" нигде ни у кого не вылазет, даже если ни я ни вы не сталкивались с тем чтобы оно вылезло.
то есть, очевидный факт: что бы выкинуть совпадение, нужно найти коллизию,
вы проигнорировали.

люди, почему вы такие тупые?

ладно, я постараюсь пропустить весь этот бред мимо ушей,
и сохранить рамки конструктива.

я захожу с другой стороны:
сегодня, компилятор/линкер умеют сами определять продукты шаблона.
судя по вашей не в полне адекватной реакции - это плохо.

приведите пожалуйста практические примеры,
которые иллюстрируют убожество компиляторов,
и необходимость самостоятельно решать за них вопросы.
0
30.03.2016, 21:57

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
люди, почему вы такие тупые?
Ну не все рождаются гениями..
Многие люди просто упёртые и глупые, многие гордые, многие умнее нас, лично я - просто тупой по жизни.

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.03.2016, 22:45
Цитата Сообщение от castaway Посмотреть сообщение
Ну не все рождаются гениями..
не нужно быть гением,что бы дружить с банальным здравым смыслом.

один урылся в стандарте, без понимания положений этого самого стандарта.
второй урылся в древних технологиях.
на вопрос: оно же умеете - тупорылый ответ: это костыль.

я не знаю, каким нужно быть, что бы полагать штатную действующию технологию костылем,
и при этом игнорируя факт, что компилятор/линкер сами себе буратины,
заявлять, мол без них никак.

это шандец-занавес.

маразм в критической отметке.
0
30.03.2016, 22:52

Не по теме:

Тут очевидная клиника, народ. Не обращайте внимания. Мы дали ТСу исчерпывающие ответы. Тему можно закрывать. Подождите - и оно само затихнет.

0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
30.03.2016, 23:03
Цитата Сообщение от hoggy Посмотреть сообщение
приведите пожалуйста практические примеры,
которые иллюстрируют убожество компиляторов,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//ifdef гуарды для краткости опущены но они тут не помогут
//---1
template <class T> Bar{
    static T Foo;
    //implementation
};
template <class T> T Bar<T>::Foo;
 
//---1.h
extern void Proc1();
 
//---1.cpp
#include "1";
void Proc1(){
     Bar<int> Baz;
     // ...other code
}
//---2
template <class T> Bar{
    static T Foo;
    //other implementation
};
template <class T> T Bar<T>::Foo;
 
//---2.h
extern void Proc2();
 
//---2.cpp
#include "2";
void Proc2(){
     Bar<int> Baz;
     // ...other implementation
};
 
 
//---- main.cpp
#include "1.h"  // Ну очень
#include "2.h"  // Очень нехорошая ситуация получится
void main(){
    Proc1();
    Proc2();
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2016, 23:03

Инициализация статического члена из шаблонного класса
Добрый день. Есть код: template&lt;int test&gt; class Test { template&lt;int a&gt; struct Inner { static bool...

Инициализация константного статического объекта - члена класса
Здравствуйте, у меня возникла проблема с инициализацией статического объекта, который является членом класса. Этот объект должен быть...

Инициализация статического члена std::vector в шаблонном классе
есть класс myclass , владеющий классом struct template&lt;class T&gt; class myclass { struct mystruct {}; public: static...

Заполнение статического поля класса с клавиатуры
Доброго времени суток, возникла проблема. Я не могу задать статическое поле с клавиатуры. Задача: добавить статическое поле и 2 метода...

Static поля в классе и инициализация
Мне нужен класс, у которого было бы общие переменные и функции их устанавливающие \ читающие для всех экземпляров. Но статик поля требует...


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

Или воспользуйтесь поиском по форуму:
73
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru