one-definition-rule

    4熱度

    1回答

    我想和你們分享一個奇怪的例子,我偶然發現並且讓我思考了兩天。 在這個例子中工作,你需要: 三角形虛擬繼承(在成員函數getAsString())模板類的 成員函數專業化(在這裏,Value<bool>::getAsString())重寫虛擬函數 (自動)通過編譯器進行內聯 您從一個模板類開始,它實際上繼承了一個通用接口e - 即一組虛擬功能。之後,我們將專門研究這些虛擬功能之一。內聯可能會導致我們

    4熱度

    2回答

    任何人都可以從ISO N3242§3.2,第二點 一組候選功能的成員,如果它是由 重載時從potentiallyevaluated表達稱爲選擇的ODR使用的解釋此語句。 (注意:這包括調用命名函數(5.2.2),操作符重載 (第13章),用戶定義的轉換(12.3.2),分配函數 放置新(5.3.4),以及非 - 默認初始化(8.5)。 ISO標準2003:表示 如果它是由重載解析選擇時 從一個潛在

    6熱度

    1回答

    任何人都可以從ISO N3242§3.2,第二點說明這個說法 非安置分配或 釋放函數一類是 ODR使用的由 構造函數類的定義。對於A類 非配置釋放函數 是ODR-usedby該 類的析構函數的 定義,或通過在一個definitionof虛擬 析構函數(12.4)0.26甲 點由 查找被選擇如012.8所述, 類別的複製分配功能由另一個 類別的隱式定義的 複製分配功能使用。 A 類別 的移動分配功能

    13熱度

    2回答

    我違反一個定義規則與以下程序? // foo.hpp #ifndef FOO_HPP_ #define FOO_HPP_ namespace { inline int foo() { return 1; } } inline int bar() { return foo(); } #endif //EOF 和 // m1.cpp

    13熱度

    4回答

    標準似乎暗示有上的變量的定義的數量沒有限制,如果它不是ODR使用的(§3.2/ 3): 每個程序應包含正好一個定義每個非內聯函數或在該程序中使用的變量;不需要診斷。 它說,任何變量不能一個翻譯單元(§3.2/ 1)內定義多次: 未翻譯單元應包含任何變量的多個定義,功能,類類型,枚舉類型或模板。 但我無法在整個程序中找到對非odr使用變量的限制。那麼,爲什麼我不能編譯類似如下: // other.c

    24熱度

    4回答

    例如: code1.c /的.cpp int a; // ... and so on code2.c /的.cpp int a; int main(void) { return 0; } 去編譯: $gcc code1.c code2.c # this is fine $ $g++ code1.cpp code2.cpp # this is dead /tmp

    3熱度

    2回答

    考慮我的小例子C庫: #include <external_library.h> void some_function(void) { external_library_call(); // Do other stuff... } 它計劃使some_function()調用公開。但是,該庫不起作用,因爲它需要的外部庫也恰好使用了一個名爲some_function()

    2熱度

    1回答

    有沒有人知道如何找到最適合3d的點圖案的線? 我對所謂的ODR(正交距離迴歸)線感興趣,它使線上所有點的歐幾里得距離之和最小。 在這個問題中是否有r函數?如果不是 - 你能告訴我怎樣才能自己實現這個嗎? 在此先感謝!

    3熱度

    3回答

    在頭文件中定義的任何函數是否會自動內聯? 如果我在一個類中聲明一個函數,並使用關鍵字inline給外部定義,這個函數是內聯的嗎?如果是這樣,爲什麼這不違背內聯函數應該被聲明的機構?

    13熱度

    2回答

    我最近創建了這個示例代碼來說明C++ 11 variadic模板函數的用法。 template <typename Head, typename... Tail> void foo (Head, Tail...); template <typename... Tail> void foo (int, Tail...); void foo() {} template <typename...