我希望能够做到这样的事情:
typedef struct
{
char* c_str;
} string;
string s = "hello";
Run Code Online (Sandbox Code Playgroud)
是否有可能以任何方式做到这一点?
我知道有可能这样做:
typedef struct
{
char* c_str;
} string;
string s = { "hello" };
Run Code Online (Sandbox Code Playgroud)
但是当它只是一个成员变量时,我不喜欢大括号.
tml*_*len 31
您可以使用a typedef而不是struct:
typedef char* string;
string s = "hello";
Run Code Online (Sandbox Code Playgroud)
但是然后const string会使指针成为常量,而不是指向数据.所以const string s相当于char* const s.解决方案可能是为const字符串定义一个附加类型:
typedef char* string;
typedef const char* const_string;
Run Code Online (Sandbox Code Playgroud)
对于原始结构,同样如此.(C++具有相同的"问题",这就是为什么它具有iterator和const_iterator在其容器的类型.)
typedef对指针类型的一个优点是你可以输入
string s1, s2, s3;
Run Code Online (Sandbox Code Playgroud)
代替
char *s1, *s2, *s3;
Run Code Online (Sandbox Code Playgroud)
Kra*_*rab 14
在C中,它是不可能的,但如果添加带有一个适当参数的构造函数,则可以在C++中完成.编译器将完成剩下的工作.如果要避免此隐式转换行为,可以将构造函数标记为显式.
在C++中:
struct string {
char * m_c_str;
/* explicit */ string(char* c_str) : m_c_str(c_str) { }
};
int main(int argc, char * argv[]) {
string s = "hello";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |