【发布时间】:2018-12-27 15:18:00
【问题描述】:
std::array<char, N> 的传递方式是什么
这样的功能:
template<size_t N>
void safe_func(char (&dest)[N]);
?
我试试这个:
#include <array>
template <size_t N> using SafeArray = char[N];
template <size_t N> void safe_func(char (&dest)[N]) {}
int main() {
SafeArray<10> a1;
safe_func(a1);
std::array<char, 10> a2;
safe_func(*static_cast<SafeArray<10> *>(static_cast<void *>(a2.data())));
}
它有效,但我怀疑,我的演员可能有问题, 在其他编译器或平台上(我使用 gcc/linux/amd64), 我遇到了错误的参考?
【问题讨论】:
-
我看不到这个问题,但你可能想通读一下:stackoverflow.com/questions/41463005/…
-
你可以简单地 reinterpret_cast 引用:它会更短,更不容易出错。但同样,这种编程是危险的。如果元素类型和类型的大小不匹配,您不会注意到,但会造成伤害。
标签: c++ arrays c++11 reinterpret-cast stdarray