language-lawyer

    4熱度

    1回答

    樣品的編號: typedef int I; struct X{ X(int); }; int main() { int(int()); X(X()); I(I()); } 線int(int());是使用功能性的轉換符號的表達 - 這是與初始化的臨時int的值初始化int。 行X(X());是一個名爲X的函數的聲明,它不返回返回struct X的參數。 我

    6熱度

    1回答

    我一直在努力用匯編問題,已經能夠縮小問題下的一個小片斷。 要設置舞臺,我試圖做CRTP,其中基本方法調用另一個派生類。複雜的是,我想使用尾隨返回類型來直接獲取類型的轉發到派生類的方法。這總是不能編譯,除非我轉發給派生類中的調用操作符。 這編譯: #include <utility> struct Incomplete; template <typename Blah> struct Ba

    4熱度

    1回答

    根據17.7.3 [temp.expl.spec]段落5(N4659) ... Members of an explicitly specialized class template are defined in the same manner as members of normal classes, and not using the template<> syntax. The same i

    18熱度

    1回答

    我不明白,爲什麼下面的代碼編譯的GCC 8.0: decltype(auto) foo(int&& r) { return r; } 在foo的r申報類型爲int&&,等的foo返回類型也int&&。但r本身是一個左值,並且左值不能綁定到右值引用。 我錯過了什麼嗎?

    14熱度

    1回答

    看看這段代碼: #include <stdio.h> struct Foo { Foo() { } Foo(const Foo &) { printf("copy\n"); } Foo(Foo &&) { printf("move\n"); } }; Foo getFoo() { Foo f; return *&f; } int m

    14熱度

    2回答

    我想了解下KRC的一些基本的C程序設計語言說 函數調用是一個後綴表達式,稱爲功能標誌,然後是包含括號可能是空的,用逗號分隔賦值表達式列表(Par.A7.17), 構成函數的參數。 在一個函數調用,什麼是運營商,什麼是操作數? 是()運營商? 函數名是操作數嗎? 是否在()操作數內的參數? 函數指示符是函數調用的同義詞嗎? 謝謝。

    3熱度

    1回答

    如果我有一個頭foo.h包含 #ifndef FOO_H_ #define FOO_H_ namespace foo { constexpr std::string_view kSomeString = "blah"; } #endif // FOO_H_ 則是安全的從多箇中包括foo.h在一個程序中.cc文件,無論他們做什麼符號爲kSomeString,還是有一些可能導致ODR

    1熱度

    1回答

    我可以通過綁定到一個引用(根據我的理解,它只能被一個左值引用)來獲取右值的地址。 有什麼辦法可以得到右值,我可以直接取地址(即像&(<rvalue>)將是一個有效的表達式,而不會覆蓋operator&())? 也許這樣至少可以通過綁定到另一個右值? (這似乎並不是這種情況,因爲我們只能「綁定」到左值的引用,參見上面的內容,但也許我在這裏錯過了一些類似的概念。) 我想要的更一般的問題答案是以下是否爲

    4熱度

    1回答

    C11指定6.7節,其聲明也定義: 的標識符的定義是該標識符的聲明: - 爲一個對象,使存儲到該對象保留; [...] 我沒有找到一個全面的列表,它的對象聲明導致存儲被保留。直覺上我很清楚,但我無法從C11標準中獲取這些信息。

    10熱度

    1回答

    這個問題Implicit type conversion rules in C++ operators(和其他幾個人)狀態 如果任是很長很長unsigned int類型的其他被提升爲長長 unsigned int類型 但是,如果我做了MSVC下以下幾點: unsigned int a = <some expression>; unsigned long long b = a << 32ULL;