我一直在MSVC 2013中使用std :: rbegin和std :: rend.当我尝试使用GCC 4.9.1或clang 3.5.0编译我的代码时,两者都告诉我'rbegin'和'rend'不属于命名空间'std'.
请参阅下面的代码示例.我做错了什么还是他们还没有在GCC和clang中实现?
// test.cpp
#include <vector>
#include <iostream>
#include <iterator>
int main(int, char**)
{
std::vector<int> test = {1, 2, 3 ,4, 5};
for (auto it = std::rbegin(test); it != std::rend(test); ++it) {
std::cout << *it << ", ";
}
std::cout << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GCC输出:
g++ --std=c++14 test.cpp -o test && ./test
test.cpp: In function ‘int main(int, char**)’:
test.cpp:10:20: error: ‘rbegin’ is not a member of ‘std’
for (auto it = std::rbegin(test); …Run Code Online (Sandbox Code Playgroud) 如果我没有为Base**指定显式强制转换,为什么会出现编译错误?
处理派生类时,我可以使用指针指针吗?
class Base { };
class Child : public Base { };
void SomeFunction(Base** ppoObj) {}
void SomeFunction(Base* poObj) {}
int main()
{
Child *c = new Child();
// This passed.
SomeFunction(c);
SomeFunction((Base**)&c);
// CompilationError
SomeFunction(&c);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含, , , , ,的char缓冲区bufbuf[0] = 10buf[1] = 3buf[2] = 3buf[3] = 0buf[4] = 58
和一个结构:
typedef struct
{
char type;
int version;
int length;
}Header;
Run Code Online (Sandbox Code Playgroud)
我想将 转换buf为Header. 现在我正在使用该功能
int getByte( unsigned char* buf)
{
int number = buf[0];
return number;
}
int getInt(unsigned char* buf)
{
int number = (buf[0]<<8)+buf[1];
return number;
}
main()
{
Header *head = new Header;
int location = 0;
head->type = getByte(&buf[location]); …Run Code Online (Sandbox Code Playgroud)