Вопросы по теме 'one-definition-rule'
Статическая переменная в заголовочном файле
Статическая переменная имеет файловую область. Скажем, у меня есть два следующих файла:
файл1.h
файл1.cpp
файл2.h
файл2.cpp
Я объявил статическую переменную, скажем, static int Var1 в обоих файлах заголовков. И file1.h , и...
38899 просмотров
schedule
04.04.2022
Нарушение ODR, когда поиск имени находит другое объявление
Я думал о следующем. Рассмотрим два файла:
A.cpp:
template<class T> void g(T) {}
inline void f() { g(1); }
Б.цпп:
template<class T> void g(T) {}
void g(int) {}
inline void f() { g(1); }
Без void g(int) {} эта...
420 просмотров
schedule
22.12.2023
Что мне разрешено делать со статическим, constexpr, членом данных, инициализированным в классе?
Вероятно, это немного необычный вопрос, поскольку он требует более полного объяснения короткого ответа на еще один вопрос и некоторые связанные с ним аспекты стандарта C++11.
Для простоты ссылки я подытожу упомянутый вопрос здесь. ОП определяет...
1378 просмотров
schedule
20.12.2022
constexpr и ODR
Если у нас есть файл заголовка widget.hpp со следующим содержанием:
constexpr int foo = 10;
struct widget
{
int bars[foo];
};
... и у нас есть две единицы перевода, созданные из двух исходных файлов, оба из которых включают только...
1979 просмотров
schedule
30.11.2023
глобальный std::string и одно правило определения
У меня есть заголовочный файл, содержащий следующее определение
const std::string error[] = {"a", "b"};
Теперь я включаю этот файл в две разные единицы перевода и компилирую исходные коды. Все работает, но почему? Ожидается, что это сломает...
3455 просмотров
schedule
30.09.2022
Что означает это предложение в параграфе §3.2/2 стандарта C++11?
Предложение является частью параграфа §3.2/2:
Переменная, имя которой появляется как потенциально вычисляемое выражение, используется odr, если это не объект, который удовлетворяет требованиям для появления в постоянном выражении (5.19) и...
318 просмотров
schedule
28.01.2023
Почему ODR не нарушается, если взять адрес встроенной статической константной целочисленной переменной-члена?
Нечто подобное было бы очевидным нарушением правила одного определения С++, если бы оно скомпилировалось:
// Case 1
// something.h
struct S {};
struct A
{
static const S val = S();
};
потому что, если что-то.h будет включено более чем в...
194 просмотров
schedule
23.10.2022
GoogleTest PrintЧтобы вас не вызывали на занятия
У меня возникла довольно странная проблема: я говорю googletest распечатать определенный класс так, как я хочу, используя PrintTo. Класс представляет собой очень простую 2D-точку, она находится в пространстве имен, и функция PrintTo находится в том же...
3359 просмотров
schedule
22.05.2024
Что означает подчиняться ODR в случае встроенных функций и функций constexpr?
Я только что прочитал, что constexpr и встроенные функции подчиняются правилу одного определения, но их определение должно быть идентичным. Вот и пробую:
inline void foo() {
return;
}
inline void foo() {
return;
}
int main() {...
304 просмотров
schedule
16.04.2022
Обратная совместимость ресурсов iOS9 On Demand (ODR)
Ресурсы по требованию (iOS)
Ресурсы по требованию — это ресурсы, такие как изображения и звуки, которые можно пометить ключевыми словами и запросить в группах по тегам. App Store размещает ресурсы на серверах Apple и управляет загрузками...
2144 просмотров
schedule
21.02.2024
Есть ли способ обнаружить нарушения ODR встроенной функции?
Итак, у меня есть этот код в двух отдельных единицах перевода:
// a.cpp
#include <stdio.h>
inline int func() { return 5; }
int proxy();
int main() { printf("%d", func() + proxy()); }
// b.cpp
inline int func() { return 6; }
int proxy() {...
3564 просмотров
schedule
26.06.2022
Гарантированно ли, что меня не укусит это нарушение ODR?
У меня есть заголовочный файл, который объявляет шаблон со статической переменной, а также определяет его:
/* my_header.hpp */
#ifndef MY_HEADER_HPP_
#define MY_HEADER_HPP_
#include <cstdio>
template<int n>
struct foo {
static...
299 просмотров
schedule
27.06.2022
Ошибка ODR в MSVC?
Эта программа печатает 1 1 вместо 1 2 при компиляции с помощью MSVC (до VS 2015).
f1.cpp:
#include <functional>
static std::function<int ()> helper() {
struct F { int operator()() { return 1; } };
return F();
}...
354 просмотров
schedule
08.10.2023
Компиляция встроенной функции
Я намерен обеспечить простые обертки для операционной системы API, которые бросают исключения, когда ошибки случаются. Эти обертки просты, и все они определяются как встроенные функции в заголовом файле. Поскольку System API должен быть большой,...
1172 просмотров
schedule
28.01.2023
использование констант в заголовочном файле с соответствием ODR
Глядя на другой вопрос , я понял, что не могу использовать объекты или функции из анонимного пространства имен через заголовочный файл, поскольку это приведет к нарушениям ODR в определениях классов или встроенных функциях. Если это так, то можно...
693 просмотров
schedule
08.01.2023
Продолжение никак не могу понять DR 712
Это в основном продолжение моего предыдущего вопроса о DR 712. Позвольте мне сначала объяснить, почему я настаиваю на том, чтобы посмотреть на что-то это можно было бы считать старым стандартом C++11, но моя проблема в том, что раздел...
277 просмотров
schedule
13.03.2024
Зависимое выражение и использование ODR в Generic Lambda в C++14
void f( int , const int (&)[2] = {}) { } // #1
void f( int , const int (&)[1] ) { } // #2
// void f(const int&, const int (&)[1] ) { } // #2_original
void test() {
const int x = 17;
auto g =...
248 просмотров
schedule
02.01.2023
Нарушение ODR в GCC 6.3.0 с типами, определенными в двух отдельных единицах трансляции
В следующем примере кода мы наблюдаем странное поведение в GCC. Странным поведением является нарушение ODR в GCC 6.3.0 с типами, определенными в двух отдельных единицах трансляции. Возможно, это связано с определениями рекурсивных типов или...
492 просмотров
schedule
09.08.2022
Как избежать нарушения ODR с классами признаков
При чтении кода онлайн из производственных библиотек я нашел что-то вроде этого
Traits.hpp
template <typename Type>
class Traits {
template <typename T,
detail::EnableIfIsInstantiation<T, Type>* =...
153 просмотров
schedule
21.01.2023
Нарушение ODR со специализациями шаблона
У нас есть заголовочный файл, который содержит некоторые остатки для различных значений точности с плавающей запятой:
template <typename T>
struct rsdTarget {
static const double value;
};
template <>
const double...
407 просмотров
schedule
05.09.2022