我想要寫,可以接受任何型別的連續的緩沖液(例如,功能std::array,std::vector,生陣列從其呼叫點,等)。我想出了兩種方法。
方法#1:
void func( int* const buffer, const std::size_t expectedTokenCount );
這里,expectedTokenCount是將插入到buffer.
方法#2:
void func( const std::span<int> buffer, const std::size_t expectedTokenCount );
在這種方法中,我認為我寫的更好的功能的方式,首先檢查的大小buffer通過buffer.size( ),并進行比較expectedTokenCount,以確保它的容量大于或等于expectedTokenCount否則拋出某種例外。這是比第一種方法有效且更安全的方法嗎?哪一個更好?如果將向量傳遞給它span,它的行為和它的size成員函式會改變還是與陣列相同?
uj5u.com熱心網友回復:
在哪里使用 std::span?
無論您在何處使用指標和大小,都可以使用std::span指標和大小代替。
[#2] 是一個有效的 ... 方法嗎?
當然。但是,您確實更改了指標的常量性。你應該使用std::span<const int>.
哪一個更好?
各有各的用途。但在大多數情況下,傳遞兩個尺寸是多余的
的使用與std::span使用兩種尺寸的變化是正交的。你可以做#1 as void(std::span<const int>),你可以做#2 as void(int* const buffer, const std::size_t buffer_size, const std::size_t expectedTokenCount)。
使用std::span通常是一種改進。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386156.html
下一篇:std::views尚未宣告
