cost 248 ms
僅使用 STL 類型重載函數的最佳實踐

[英]Best practice for overloading functions with only STL types

我想重載operator<<(std::ostream&, std::chrono::duration<std::uint64, std::nano>) - 理想情況下不需要用戶在任何地方編寫using語句。 這里的最佳做法是什么? 語境... 有沒有一種方法可以在不 ...

第一個朋友 function 模板聲明通過“使用命名空間”可見,但通過限定名稱查找不可見

[英]first friend function template declaration is visible through `using namespace` but not through qualified name lookup

我有以下代碼,我用 C++11 編譯。這段代碼是對現實世界用法的簡化。namespace bar { template<int M = 10> struct S { template<int N = M*2> friend int foo(S) { ...

標准C++庫中哪些函數在使用時不應該以std::為前綴?

[英]Which functions in standard C++ library should not be prefixed with std:: when used?

當我在 C++ 中編程時,而不是using namespace std; ,我通常傾向於使用std::前綴組件,如std::cout , std::cin等。但后來我遇到了 ADL 以及為什么你應該使用using std::swap; . 標准庫的許多組件(在 std 內)以不合格的方式調用 ...

隱藏的朋友 to_json function 意外解析為 shared_ptr

[英]Hidden friend to_json function unexpectedly resolves for shared_ptr

下面的代碼( Goldbolt )編譯並運行(在 gcc 和 clang 上)並執行我希望的操作。 但令我驚訝的是,我預計必須使用 adl_serializer 專業化(而不是這里的隱藏朋友)才能找到to_json / from_json函數,因為Example class 隱藏在std::sha ...

類模板中聲明的友元函數的模板參數的扣除

[英]Deduction of template arguments for friend function declared in class template

考慮以下示例: 我的理解是表達式Func(U{})導致函數Func的非限定名稱查找,並通過 ADL 找到聲明decl-2 。 但是,這不是重載決議的可行候選函數(因為它沒有定義),因此編譯器選擇聲明decl-1 。 誤解,與問題無關,請參閱@LanguageLawyer 的評論 我的問題是標准中 ...

在 c++17 標准中使用命名空間 std 導致 boost 指針強制轉換觸發 ADL

[英]using namespace std causes boost pointer cast to trigger ADL in c++17 standard

我有一個簡單的代碼,帶有來自 boost 庫的繼承和shared_ptr 。 使用標准 c++20,代碼編譯得很好。 對static_pointer_cast和dynamic_pointer_cast的函數調用在沒有預先添加boost::命名空間的情況下進行編譯——這些函數調用由於 ADL(參數相關 ...

為什么這個函數調用沒有拒絕不合適的重載?

[英]Why is this function call didn't reject the unsuitable overload?

考慮以下代碼: 它運行正常。 顯然,它調用了這個重載函數(嚴格來說,函子): 但是在我們引入命名空間std之后,函數調用變得模棱兩可(編譯錯誤): 除了之前的重裝 ,在命名空間 std 中還有許多其他重載函數,例如: 和 所以我的問題是: std::ranges ...

C++ 類模板可以在沒有尖括號的情況下被隱式專門化和實例化?

[英]C++ class templates can be implicity specialized and instantiated without angle brackets?

這實際上可以編譯和工作,但我不清楚為什么。 在讓 lint 檢查器說服我讓LikeA的構造函數之一explicit之前,我之前曾調用f like f(3.1415927) 。 在那之后,當然,它不能將常量隱式轉換為LikeA 。 如果您只是添加大括號(即f({3.1415927}) ,編譯器仍然 ...

ADL 與當前命名空間中的 function 沖突

[英]ADL conflicts with a function in the current namespace

我的命名空間中有一個 function。 它的名字叫destroy 。 std命名空間還包含一個具有此名稱的 function 。 當我在我的命名空間中調用我的 function 時,調用是不明確的,因為std::destroy也被添加到由參數相關查找設置的重載決議中。 上面的代碼無法編譯。 好的 ...

嘗試重載“<<”運算符時,沒有運算符“<<”匹配這些操作數錯誤

[英]No operator "<<" matches these operands error when trying to overload the "<<" operator

我是 c++ 的新手,我想簡單地從我的 Deck class 的 main.cpp 文件中打印出一個向量向量。 我想我需要重載 &lt;&lt; 運算符,因為我正在嘗試 output 是 Deck 對象的成員變量之一,但我在實現它時遇到了麻煩。 如果重要的話,我也試圖讓 Deck 成為 single ...

為什么參數相關查找 (ADL) 選擇 class 方法而不是更合適的免費 function 方法?

[英]Why is argument-dependent lookup (ADL) choosing class method instead of more fiting free function?

根據cppreference ,在Argument-dependent lookups function 名稱在其 arguments 的名稱空間中查找,此外還包括通常的非限定名稱查找所考慮的范圍和名稱空間。 然而,為什么在下面的示例中 function A::member_function() ...

使用具有循環依賴的 ADL 的 C++20 概念

[英]C++20 concepts using ADL with circular dependency

我對使用 ADL 的概念有疑問。 編輯1:我提到ADL,因為parse函數應該被用戶定義的類型重載。 from_string_view_parsable概念看不到下面的parse函數,因為 ADL 不適用於它們。 這些函數需要在概念定義之前定義或前向聲明,但是第二次重載存在循環依賴,因此無法完成。 ...

警告由於 ADL 而丟失 std:: 前綴

[英]Warn against missing std:: prefixes due to ADL

當參數類型在該命名空間中時,可以省略&lt;algorithm&gt;的std::命名空間,這通常是這種情況。 是否有任何警告或整潔的規則可以發現此類遺漏? 上面的示例使用最新的 clang 和 -Wall、-Wextra 和 -Wpedantic 編譯,不會發出任何診斷信息: https://g ...

為什么爭論依賴查找不適用於 c++ 中的類型別名?

[英]Why does arguement dependent lookup not work for type aliasing in c++?

考慮以下最小示例,選項 1 未找到function ,而選項 2 找到了它。選項 1 的參數相關查找似乎失敗。為什么? 一種可能的解決方案是通過using foo::function; function 以上主要。 是否有替代方法可以避免選項 1 的這種 using 語句? ...

GCC &lt;= 10 的模板 ADL 的替代方案

[英]Alternative to template ADL for GCC <= 10

考慮以下有效的 C++20 代碼: 在這里,由於添加了 C++20( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0846r0.html ), get&lt;N&gt;能夠通過 ADL 解決我的問題是,在 C++20 之前有哪些解 ...

C++ 在嵌套命名空間內定義外部命名空間的函數

[英]C++ Define function of external namespace inside of nested namespace

考慮代碼 這是無效的 C++ 語法 - 但我正在尋找有效的東西。 我需要聲明 ::A::func(),但是在命名空間 B 中(我不想要 B::A::func,而是 A::func)。 (如果你問為什么?那是因為 func() 最終將由一個宏聲明,該宏也在命名空間 B 中聲明了一些東西。) ...

類型擦除設置 C++ 中的內部 class 找不到朋友 function

[英]Friend function not found by inner class in Type Erasure setup C++

我看了 Klaus Iglberger 在 CppCon 2021 上關於類型擦除的精彩演講。 我去自己根據他的例子設置了模式。 他的 External Polymorphic piece 發送給朋友 function 的 outer class。那篇文章不是為我編譯的。 我試過打亂定義順序並將朋 ...

參數相關查找如何在搜索點之后找到聲明?

[英]How does argument dependent lookup find declarations after the search point?

上面的代碼編譯和運行沒有問題,但我不明白f(a)的查找是如何發生的。 最初會在類及其父作用域(即全局作用域)中進行非限定名稱查找。 由於friend f不是成員並且沒有using-directive我認為不合格的名稱查找將一無所獲。 因此發生了依賴參數的查找。 C++ 草案 2021(N490 ...


 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM