one-definition-rule

    6熱度

    1回答

    句子是§3.2/ 2段的一部分: 一個變量,其名稱顯示爲潛在評估表達是 ODR使用的,除非它是滿足出現在用於 要求的對象常數表達式(5.19)和左值到右值 轉換(4.1)立即應用。 粗體的句子究竟是什麼意思? 編輯: 這個問題的答案,其中這個被認爲是重複的問題,並沒有說什麼,能回答我的問題。

    54熱度

    2回答

    這只是在another question的背景下出現的。 顯然,類模板中的成員函數僅在使用ODR時才實例化。 有人可以解釋究竟是什麼意思。 wikipedia article on One Definition Rule (ODR)沒有提及「ODR-使用」。 然而,標準將其定義爲 一個變量,其名稱顯示爲潛在評估表達 是ODR使用的,除非它是滿足出現在常量表達式爲 要求的對象(5.19)和左值到右值

    14熱度

    6回答

    我正在閱讀this code from here(中文)。在C中有一段關於測試全局變量的代碼。變量a已在包含兩次的文件t.h中定義。在文件foo.c中定義了具有某個值的struct b函數和main函數。在main.c文件中,定義了兩個未經初始化的變量。 /* t.h */ #ifndef _H_ #define _H_ int a; #endif /* foo.c */ #incl

    0熱度

    1回答

    所以嘗試使用scipy.odr進行線性迴歸。然而,它慘敗了。 scipy.odr之前爲我工作過,並且在代碼中看不到任何錯誤。我能想到的唯一原因是斜率可能太小,但我不明白這會如何影響scipy。 謝謝你的幫助。 的代碼: #!/usr/bin/env python3 -i # -*- coding: iso-8859-1 -*- import matplotlib.pyplot as plt

    2熱度

    1回答

    多個翻譯單元是否可以使用不同的默認模板參數對相同的模板進行聲明,但具有相同的定義?例如,如果b.cpp和c.cpp中的翻譯單元鏈接在一起,下列代碼是否違反了ODR? // a.hpp template <bool> class x {...}; // b.cpp template <bool = true> class x; #include "a.hpp" // uses of x<

    3熱度

    2回答

    One Definition Rule指出程序應該包含每個非內聯函數的一個定義。對於模板類的成員,這並不完全清楚對我說: /////////// // Tfoo.h template<typename T> class A { void foo(){} }; /////////// // intfoo.h #include <Tfoo.h> template<> clas

    1熱度

    1回答

    原諒錯綜複雜的標題。 此問題的設置如下: 我有一個開源的lib我已經建成了一堆的.libs(VTK如果你是好奇) 我有一個使用該庫上述靜態庫。讓我們把它叫做庫A. 我也有使用上述庫(即VTK),並且也使用庫A. 在生成過程中的應用程序,我得到一個鏈接錯誤,告訴我,從調用的函數Lib A已經在鏈接到應用程序的庫中定義(錯誤:LNK2005) 關於如何解決將所有內容切換爲動態鏈接的任何想法?

    4熱度

    1回答

    當標記包含內嵌認爲是函數內部的表達式「潛在評價」? a.cpp template <typename T> const T& foo(const T& arg) { return arg; } inline void dead() { int x(21); x = foo(x); } b.cpp #include <iostream> template <typ

    5熱度

    1回答

    下面,static constexpr成員L被初始化爲類A,然後通過值或(通用)引用傳遞。後者在Clang中失敗,但在GCC中失敗,並且成員/非成員函數的行爲略有不同。更詳細: #include <iostream> using namespace std; struct A { static constexpr size_t L = 4; template <ty

    3熱度

    3回答

    我有一個包含以下定義 const std::string error[] = {"a", "b"}; 現在,我在兩個不同的翻譯單元此文件和編譯源代碼的一個頭文件。一切正常,但爲什麼?預計這將打破one definition rule。 現在更有趣,我改變了類型 const char* error[] = {"a", "b"}; ,在這裏它是,預期的錯誤 multiple definitio