【发布时间】:2020-01-03 06:39:27
【问题描述】:
整个代码在链接下面。 base64 decode snippet in c++ 我对上述链接代码中的 const 指针有疑问。
主要
std::vector<BYTE> myData;
...
std::string encodedData = base64_encode(&myData[0], myData.size());
base64_encode
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,所以指针可以改变,但缓冲区的值不能改变。
使用 BYTE const* buf 时,const 是指针变量,所以值可以改变但地址不能改变。
在上面的代码中, buf指针是const,但是buf++可以吗?
以及为什么使用 BYTE const* buf 而不是 const BYTE* buf?
谢谢
【问题讨论】:
-
松散相关:这是一个帮助弄清楚“C 胡言乱语”真正含义的简洁工具:cdecl.org
-
规则是
const绑定到它的紧邻 left... 除非const是第一个,在这种情况下(作为例外一般规则)它将事物绑定到其直接正确。
标签: c++ pointers arguments constants