求高手解答几个c++有关问题

求高手解答几个c++问题
问题一:
const   char   *str   =   "hello ";
extern   "C "
{
void   *malloc(   int   );
char   *strcpy(   char   *,   const   char   *   );
int   printf(   const   char   *,   ...   );
int   exit(   int   );
int   strlen(   const   char   *   );
}
int   main()
{   /*   C   语言程序   */
char*   s   =   (char*)malloc(   strlen(str)+1   );
strcpy(   s,   str   );
printf(   "%s,   world\n ",   s   );
exit(   0   );
}
以上程序用到了c连接指示符,这个extern   "C "叫做“连接指示符”,也就是说在程序连接时指示编译器到库中按照c命名方式寻找函数,而不是按照c++方式,因为在c++编译以后的库函数名字是含有参数信息的,我的问题是,程序在运行的时候会自动加载c库吗,不然连接的时候去哪里找以上的函数????


问题二:
关于c++中的string类,如果对其使用sizeof运算符结果到底是32   还是12,   我的运行结果是32,但是c++prime上说是12,   不知道为什么??


问题三:
char*   pch=“fasdfaf”;
pch指向的是常量字符串,这句编译没有问题,但是为什么如果按照以下编译就会出现问题:
const   char*   pch= "fasdfaf ";
char*   pch1=pch;
编译不通过???

问题四:
为什么在类中不能声明下列函数
static   void   fun()const{};
也就是说问什么静态函数不能是const的


------解决方案--------------------

问题一:
extern "C "与问题无关。程序运行的时候是否加载c库在编译时确定。如果选用静态连接到c库,编译时就会把c库代码写进exe里面,运行时就不需要加载了。如果选用动态连接到c库,运行时就会加载c库。

问题二:
C++标准并没有规定string的大小。所以sizeof(string)在不同的编译器上可以有不同的大小。

问题三:
"fasdfaf "的类型是const char*,一般不可以将const char*赋值给char*。C++允许
char* pch= "fasdfaf ";
是为了兼容c代码。

char* pch1=pch;
是不允许的。

问题四:
成员函数是否带const指明this指针是否带const,而静态函数没有this指针。

------解决方案--------------------
问题一:
const char *str = "hello ";
extern "C "
{
void *malloc( int );
char *strcpy( char *, const char * );
int printf( const char *, ... );
int exit( int );
int strlen( const char * );
}
int main()
{ /* C 语言程序 */
char* s = (char*)malloc( strlen(str)+1 );
strcpy( s, str );
printf( "%s, world\n ", s );
exit( 0 );
}
以上程序用到了c连接指示符,这个extern "C "叫做“连接指示符”,也就是说在程序连接时指示编译器到库中按照c命名方式寻找函数,而不是按照c++方式,因为在c++编译以后的库函数名字是含有参数信息的,我的问题是,程序在运行的时候会自动加载c库吗,不然连接的时候去哪里找以上的函数????

回答:
默认用的应该是运行库的静态链接库的版本。

问题二:
关于c++中的string类,如果对其使用sizeof运算符结果到底是32 还是12, 我的运行结果是32,但是c++prime上说是12, 不知道为什么??

回答:
cstring类实现不同,大小就不同

问题三:
char* pch=“fasdfaf”;
pch指向的是常量字符串,这句编译没有问题,但是为什么如果按照以下编译就会出现问题:
const char* pch= "fasdfaf ";
char* pch1=pch;
编译不通过???

回答:
const char* pch= "fasdfaf ";这一句的意思是pch所指向的字符不可修改。
如果char* pch1=pch;可以的话,那么 strcpy( pch1,L "change text ");不就可以修改pch所指向的字符了吗?


问题四:
为什么在类中不能声明下列函数
static void fun()const{};
也就是说问什么静态函数不能是const的

回答:
函数后带 const是修饰 this的,表示此函数不修改 this内的任何内容,而静态函数是全局函数,它不是this的成员函数