簡體   English   中英

如何初始化 std::mt19937

[英]how to initialize std::mt19937

我收到這兩行特定代碼的編譯錯誤。 如果我完全按照編譯器的要求去做,那么我最終會得到一種與我想要的行為不同的行為。

如果有任何跡象,我正在使用 clang 進行編譯:

~ $ g++ -v      
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.12)
Target: x86_64-apple-darwin19.3.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

這是錯誤來自的兩行代碼。

std::random_device rd;
std::mt19937 gen{rd()};

這是編譯調用。

g++ -O3 -fno-tree-vectorize src/comp.cpp src/common.h src/internal.cpp src/tsc_x86.h src/main.cpp

這是編譯器錯誤。

src/main.cpp:73:21: error: expected ';' at end of declaration
    std::mt19937 gen{rd()};
                    ^
                    ;
src/main.cpp:89:21: error: expected ';' at end of declaration
    std::mt19937 gen{rd()};
                    ^
                    ;

如果有任何跡象,這是作業(盡管調試模板文件未列為任務)。

默認情況下,Clang 構建為 C++98。

通過-std=c++17使自己保持最新狀態並獲得對較新語法的訪問權。

目前,它不能識別這種初始化語法,這就是為什么它只能認為建議添加一個分號(而且,你是對的:這實際上不是你想要的)。

如果你想知道為什么引用 C++11 特性std::mt19937仍然有效,那要么是因為它是一個特性(在早期的標准模式下他們可能不會打擾禁用),要么因為你從來沒有真正通過解析您最終不知道該類型是否會在名稱查找中找到。

暫無
暫無

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

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