Ошибки, баги, вопросы - страница 3326

 
A100 #:

Неправильный ответ - прогрессивный компилятор при инициализации последовательностью поместит i=2 в область памяти ReadOnly (поскольку i - const). И далее при вызове списка инициализации конструктора и попытке записи i=1 будет ошибка доступа к памяти

Вы можете высказывать любое мнение. Вижу только искусственное ограничение. Уверен, что оба некомпетентны в этом вопросе. Боюсь, разработчики компилятора не пояснят.

 
fxsaber #:

Вы можете высказывать любое мнение. Вижу только искусственное ограничение. Уверен, что оба некомпетентны в этом вопросе. Боюсь, разработчики компилятора не пояснят.

Все правильно. В С++ есть агрегатная инициализация. Это то, что ты в {...} хочешь сделать. Она возможна с рядом исключений, одно из них: не должно user-provided или user-declared (в зависимости от стандарта) конструктора. В принципе тут частично, очень и очень упрощенно, сделаны все эти танцы с притопами вокруг вариантов инициализации в С++.

PS. Кто хочет прикоснуться ко всему этому ужасу в оригинале, милости просим))): https://en.cppreference.com/w/cpp/language/initialization

 

Всем привет. Заметил кое-что небольшое. В текущем билде при обращении к полю паблик структуры класса - автоподстановка не работает. Ставлю точку после имени структуры - и ничего, отображения имен её полей нет.

Спасибо за внимание!






 
fxsaber #:

Вы можете высказывать любое мнение. Вижу только искусственное ограничение. Уверен, что оба некомпетентны в этом вопросе. Боюсь, разработчики компилятора не пояснят.

Есть и существенное более искусственные ограничения сомнительной полезности, например:

1. Число параметров макроса ограничено значением 8

#define MACRO(X1,X2,X3,X4,X5,X6,X7,X8,X9) //'X9' - too much parameters for macro

что не дает развернуться в полную силу. При этом даже в некоторых функция WinAPI - 12 параметров

2. В условной компиляции нельзя поставить пробел\табуляцию:

#ifndef MACRO1
#    ifdef MACRO2 //'#' - invalid preprocessor command
#    else
#        ifndef MACRO3
#        else
#        endif
#    endif
#else
#endif

чтобы сразу было видно какой if к какому else и endif относится

3. В #import нельзя использовать макро

#define TEST_EX5    "test.ex5"
struct A {};
#import TEST_EX5    //#import is expecting a filename
    void f( A& );
#import

при этом, если использовать описание данных по месту нахождения каждой функции, то для одного и того же .ex5 #import нужно постоянно открывать\закрывать, что подразумевает макроподстановку, чтобы не перепутать

 
A100 #:
Ну показал я ошибку в простейшем виде:
И что? Исправили ее? - Нет - потому что сочли несущественной. И действительно - в таком виде она выглядит как несущественная. Но по сути странно, что на #define перенос действует, а на остальной код - нет. Т.е действуют разные правила для разных частей программы... а зачем такое усложнение?

Кстати перенос строки на #define - с ошибкой работает. Пример с ним ошибки при выполнении:

#define unsignedint    double
#define MACRO unsigned\
int
void OnStart()
{
    Print(sizeof(MACRO));
}

Результат:   4

Ожидалось: 8

 
A100 #:

Есть и существенное более искусственные ограничения сомнительной полезности, например:

1. Число параметров макроса ограничено значением 8

что не дает развернуться в полную силу. При этом даже в некоторых функция WinAPI - 12 параметров

2. В условной компиляции нельзя поставить пробел\табуляцию:

чтобы сразу было видно какой if к какому else и endif относится

3. В #import нельзя использовать макро

при этом, если использовать описание данных по месту нахождения каждой функции, то для одного и того же .ex5 #import нужно постоянно открывать\закрывать, что подразумевает макроподстановку, чтобы не перепутать

Так плохо?

#ifndef MACRO1
   #ifdef MACRO2 // Гут
   #else
      #ifndef MACRO3
      #else
      #endif
   #endif
#else
#endif
 
Artyom Trishkin #:

Так плохо?

Пробовал так, но остановился на варианте целиком слева:

#ifndef MACRO1
#ifdef MACRO2 // Уж лучше так
#else
#endif
#else
#endif

Так визуально легче отличить препроцессор от основного кода

 
A100 #:

Пробовал так, но остановился на варианте целиком слева:

Совсем не наглядный вариант

 
A100 #:

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

Не нашел их существеннее. В моем случае речь про возможность писать template-функции без ограничений.
 
fxsaber #:
Не нашел их существеннее. В моем случае речь про возможность писать template-функции без ограничений.

Не существенно более весомые, а

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2023.06.01 10:38

Есть и существенное более искусственные ограничения сомнительной полезности, например:

И у Вас ограничение не с потолка взято, а из классического C++, а тут взять и цифру поменять с 8 на 16 и на 64

Причина обращения: