![](/img/trans.png)
[英]Is it valid to use std::function with incomplete types?
我想知道使用不完整類型的std::function是否有效,例如在前向聲明的情況下。 我寫了這個小代碼: 即使S在聲明m時不完整,我也可以將返回類型聲明為完整類型(非指針返回類型)。 此代碼符合要求並正常工作,但我不確定此代碼是否符合標准。 因為如果返回類型不是普通函數中的指針,則不能轉發聲明返回 ...
[英]Is it valid to use std::function with incomplete types?
我想知道使用不完整類型的std::function是否有效,例如在前向聲明的情況下。 我寫了這個小代碼: 即使S在聲明m時不完整,我也可以將返回類型聲明為完整類型(非指針返回類型)。 此代碼符合要求並正常工作,但我不確定此代碼是否符合標准。 因為如果返回類型不是普通函數中的指針,則不能轉發聲明返回 ...
[英]Characteristics of bit-Fields in C++
閱讀https://en.cppreference.com/w/cpp/language/bit_field ,以下結論是否正確? 相鄰位域之間是否沒有填充是實現定義的(這在https://eel.is/c++draft/class.bit#:bit-field中有所不同) 位域在類對象中的放置是實 ...
[英]Does an identifier declared with external linkage w/o external definition and used in _Generic violate semantics?
來自最新的C2x (6.9p5)(添加了重點): 外部定義是外部聲明,它也是 function(內聯定義除外)或 object 的定義。如果在表達式中使用使用外部鏈接聲明的標識符(而不是作為 typeof 運算符的操作數的一部分其結果不是可變修改類型,或結果不是 integer 常量表達式的 si ...
[英]Concept is satisfied by a type that would seemingly produce an invalid expression
在下面的代碼中, can_foo概念測試是否可以在類型的實例上調用foo()成員 function。 我將使用它來測試兩個模板的實例: base有條件地啟用foo成員 function, derived覆蓋foo以調用其 base 的實現:template <typename T> co ...
[英]Function declaration must be available as none of the arguments depend on a template parameter
以下代碼在 trunk gcc 和 clang 中編譯良好,但在 msvc for c++20 模式中失敗: 與消息: 適用於 c++17 模式的 msvc,因為/permissive-自 c++20 以來僅在默認情況下可用。 可以通過顯式指定模板類型輕松修復 msvc c++20,即f<T& ...
[英]Confusion (or Clang bug?) about incomplete types in std::vector
[vector.overview]/4 中的 C++20 標准狀態: 如果分配器滿足分配器完整性要求,則在實例化 vector 時可以使用不完整類型 T。 在引用向量的結果特化的任何成員之前,T 應該是完整的。 默認分配器std::allocate確實滿足allocator completene ...
[英]Can volatile variables be read multiple times between sequence points?
我正在制作自己的 C 編譯器,以嘗試了解有關 C 的盡可能多的細節。我現在正試圖准確了解volatile對象的工作原理。 令人困惑的是,代碼中的每個讀取訪問都必須嚴格執行(C11,6.7.3p7): 具有 volatile 限定類型的 object 可能會以實現未知的方式進行修改或具有其他未知的副 ...
[英]Is `T array[N]{}` a value initialization or aggregate initialization?
考慮一些類型T (為簡單起見,您可以假設為int )和一些整數常量N ,我們用它來定義這樣的數組: 根據cppreference ,值初始化定義如下: 這是在使用空初始化器構造 object 時執行的初始化。 但再往下寫: 在所有情況下,如果使用空括號 {} 並且 T 是聚合類型,則執行聚合初始化 ...
[英]Why does this const function return a non-const reference?
在這段代碼中,為什么 GetAutoRef和GetAutoRefJ的返回值的常量性不同, GetDecltypeAutoJ的返回值不是const? 如果通過J函數中的const this指針訪問, j不應該是 const 嗎? https://godbolt.org/z/3v4PKG5n3 ...
[英]Explicit call to __call__ works and uses __init__
我正在學習 Python 3.X 中的重載,為了更好地理解該主題,我編寫了以下在 3.X 中有效但在 2.X 中無效的代碼。 我預計下面的代碼會失敗,因為我沒有為 class Test定義__call__ 。 但令我驚訝的是,它有效並打印出"constructor called" 。 演示。 所以 ...
[英]Can Niebloids be passed where Callables is required?
一般來說,除非明確允許,否則 C++ 程序嘗試獲取標准庫 function 的指針的行為是未指定的。 這意味着在將它們作為Callable傳遞之前應格外小心。 相反,通常最好將它們包裝在 lambda 中。 有關該主題的更多信息: 我可以獲取標准庫中定義的 function 的地址嗎? 然而,C+ ...
[英]Do lambda expressions that appear in different definitions of a same entity produce the same closure type?
在 C++20 中,我們可以在未計算的上下文中使用 lambda 表達式。 考慮以下 C++20 代碼: foo.cpp文件#include <typeinfo> struct Foo { using T = decltype([]{}); }; // struct Foo ...
[英]Are floatN_t in stdfloat guarenteed to be IEEE compliant?
與基本類型( float 、 double和long double )不同,C++23 中引入的<stdfloat>中的新floatN_t類型是否始終是 IEEE 標准二進制浮點類型? cppreference for fixed width floating-point page確 ...
[英]Are intmax_t and uintmax_t guaranteed to be of the same size?
我需要知道intmax_t是否總是與uintmax_t “相同類型”,除了使用補碼而不是無符號值。 或者用正式的術語來說,下面的代碼是否總是在符合標准的編譯器中編譯?#include <cstdint> // The important assertion: static_asser ...
[英]Non understood template and accessibility behavior
無論如何, A::Stuff是protected的,那么為什么繼承自A並強制其成員的可訪問性protected導致錯誤?class A { protected: template <typename T> static void Stuff() { ...
[英]In C++ can I treat an array of single-member unions as an array of the element?
假設我正在編寫一個運行時大小固定大小的數組 class,有點類似於 Rust 的Box<[T]> ,以便在我知道數組在初始化后不會更改大小時節省跟蹤容量的空間。 為了支持沒有默認構造函數的類型,我希望能夠允許用戶提供一個生成器 function,它獲取元素的索引並生成一個T 。 為了做 ...
[英]Why does having an `int (*)(float)` point to an `int foo()` trigger a warning, but having an `int (*)(double)` point to it doesn't?
我有這段代碼:int foo() { return 0; } int main() { int (*float_function)(float) = foo; } 當使用x86-64 GCC 12.2和-Wall編譯時,它會產生警告(鏈接): 警告:從不兼容的指針類型“int (*)() ...
[英]Is the compiler allowed to not retract the stack pointer when an object on the stack goes out of scope?
我使用的是 Raspberry Pi Pico,它有兩個內核,都有一個 4KB 堆棧,core0 在 core1 之上,這樣 core0 在單線程應用程序中就有 8KB 的堆棧。 引發這個問題的要點如下: 這里我們在堆棧上分配了 4KB,“而我們有 8KB 的堆棧”。 然后我們從 scope 中得 ...
[英]Does a constant reference member variable in an anonymous struct extend the lifetime of a temporary?
考慮以下代碼: 因此GetTemp()返回一個臨時值 object,然后將其分配給常量引用變量。 但是,該常量引用變量是匿名局部結構的成員。 問題:C++ 標准是否保證臨時對象的生命周期會延長到循環終止之后? 考慮到這個問題,我本以為答案是否定的,即我在循環體中得到了一個懸空引用。 然而, gcc ...
[英]Is clang right to complain about an out of line definition of a templated constructor using a concept?
這是一個帶有模板化構造函數的結構,該構造函數被定義為異常:template <typename T> struct Foo { template <typename F> Foo(F f); }; template <typename T> templ ...