簡體   English   中英

在C ++中使用復合文字

[英]Using compound literals in C++

我想使用compound literal初始化Matrix4類型的變量。 我的構造函數期望float*

所以這是我的初始化行:

const Matrix4 Matrix4::identity ( (float[16]) { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } );

這似乎應該起作用,但是Visual Studio表示它是“非標准顯式類型轉換”。 但是我想保留“單行初始化”,除非確實有更方便的方法。

您已經使用無關的靜態成員詳細信息使問題復雜化了。 實際上,該問題可以很容易地重現為:

void foo(float* );

void k() {
    foo((float[4]){1, 2, 3, 4});
}

您在這里擁有的是為C99定義的“復合文字”。 按照標准,它在C ++中不可用,但是某些編譯器具有支持此功能的擴展。 從問題本身來看,MSVC似乎也支持此擴展-它在消息中提到了此擴展-但不允許使用代碼。 可能有一種方法可以在MSVC上顯式啟用它,但是我對此並不熟練。

在這種情況下,我真的看不出編寫不符合要求的代碼的原因,因此我建議不要這樣做。

編輯后回答問題,實際上有幾種方法可以實現單線通話。 可以使函數接受std::initializer_list<float>作為可變數量的參數, std::array<float, 16>作為固定數量的參數,或者接受gsl::span

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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