当它们在内存中表示时,C++ 对象是否与 C 结构相同?
例如,使用 C,我可以做这样的事情:
struct myObj {
int myInt;
char myVarChar;
};
int main() {
myObj * testObj = (myObj *) malloc(sizeof(int)+5);
testObj->myInt = 3;
strcpy((char*)&testObj->myVarChar, "test");
printf("String: %s", (char *) &testObj->myVarChar);
}
我不认为 C++ 允许+
为内置char *
类型重载运算符。
所以我想创建我自己的轻量级字符串类,它没有额外的开销std::string
。我认为std::string
是连续表示的:
(int)length, (char[])data
我想要完全相同的功能,但没有前缀长度(节省 8 个字节的开销)。
这是我用来测试的代码,但它会导致段错误
#include <iostream>
using namespace std;
class pString {
public:
char c;
pString * pString::operator=(const char *);
};
pString * pString::operator=(const char * buff) {
cout << "Address of this: " << (uint32_t) this << endl;
cout << "Address of this->c: " << (uint32_t) &this->c << endl;
realloc(this, strlen(buff)+1);
memcpy(this, buff, strlen(buff));
*(this+strlen(buff)) = '\0';
return this;
};
struct myObj {
int myInt;
char myVarChar;
};
int main() {
pString * myString = (pString *) malloc(sizeof(pString));
*myString = "testing";
cout << "'" << (char *) myString << "'";
}
编辑:没有人真正了解我想做什么。是的,我知道我可以在类中有一个指向字符串的指针,但这比普通的 cstring 贵 8 个字节,我想要完全相同的内部表示。谢谢你的尝试
编辑:与使用 strcat 等相比,我想要实现的最终结果是能够使用 + 运算符而没有额外的内存使用
const char * operator+(const char * first, const char * second);