整个代码在链接下方。 base64 decode snippet in c++ 我在上面的链接代码中有一个关于const指针的问题。
std::vector<BYTE> myData;
...
std::string encodedData = base64_encode(&myData[0], myData.size());
std::string base64_encode(BYTE const* buf, unsigned int bufLen) {
std::string ret;
int i = 0;
int j = 0;
BYTE char_array_3[3];
BYTE char_array_4[4];
while (bufLen--) {
char_array_3[i++] = *(buf++);
if (i == 3) {
参数是BYTE const * buf,而不是const BYTE * buf。
当const BYTE * buf用作参数时, const用于BYTE,因此可以更改指针,但不能更改buffer的值。
使用BYTE const * buf时,const用于指针变量,因此可以更改值,但不能更改地址。
在上面的代码中, buf指针是const,但是buf ++可以吗?为什么使用BYTE const * buf代替const BYTE * buf?
谢谢
答案 0 :(得分:1)
const BYTE*
和BYTE const*
are equivalent to each other令人困惑。两者都是指向常量的指针。
要使指针本身为常量,公式为BYTE *const
。指向const的const指针将为BYTE const *const
或const BYTE *const
。
我无法推测该函数的作者为什么选择BYTE const*
版本而不是流行的const BYTE*
。