Что лучший способ состоит в том, чтобы инициализировать структуру битового поля в C++?

Вы можете определить DRDA-ссылку на ссылку на базу данных OCDB, которая должна позволить вам подключаться практически к любой стандартной базе данных SQL на другом сервере. Но вы, вероятно, не получите его от системных администраторов мэйнфреймов, поскольку это нестандартно и трудно поддается управлению.

Репликация, вероятно, будет вашим лучшим выбором - есть несколько инструментов от обоих поставщиков: https://docs.microsoft.com/en-us/sql/relational-databases/replication/non-sql/ibm -db2-абоненты? view = sql-server-2017 описывает предложение Microsoft.

5
задан Grace Note 6 July 2010 в 14:13
поделиться

6 ответов

Вы могли всегда делать это в своем конструкторе:

memset(&bflag, 0, sizeof bflag);
9
ответ дан 18 December 2019 в 05:50
поделиться

Объединение структура битового поля с чем-то более легким для инициализации к 0.

9
ответ дан 18 December 2019 в 05:50
поделиться

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

class Big {
    union {
        struct {
            unsigned int field1 : 1;
            ...
        } fields;
        unsigned int all_fields;
    };
    ...
};

Big::Big()
  : all_fields(0),
    ...
{
    ...
}

MSVC позволяет анонимные структуры в объединениях (см., например, определение D3DMATRIX в <d3d9.h>), но это - нестандартное расширение C++, которого необходимо избегать использования, если Вы можете.

6
ответ дан 18 December 2019 в 05:50
поделиться

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

3
ответ дан 18 December 2019 в 05:50
поделиться

Ваше использование подобного функции инициализатора (отмеченный "Я могу обнулить bflag здесь?"), на 100% достаточно для инициализации структуры POD с 0 значениями.

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

Править: Только для 'забавы' я просто проверил это с VS2005, VS2008, GCC 3.4.4, GCC 4.2 и Borland C++ 5.5.1... только Borland C++ 5.5.1 понимает его превратно.

И я говорю 'неправильно', потому что мне кажется, что 8.5 и 8.5.1 из стандарта подразумевают, что подобный функции инициализатор должен обнулить-init структуру POD.

2
ответ дан 18 December 2019 в 05:50
поделиться

Вы могли Обнулить использование памяти ZeroMemory или memset в конструкторе таким образом это инструмент для очистки взгляда.

0
ответ дан 18 December 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: