作者:严气 | 来源:互联网 | 2023-06-01 16:18
c++中string a;和string b();的区别
#include
#include
using namespace std;
int now(){
return 1;
}
int main(){
string a;
string b();
string c("abc");
string c1("a");
string d(10,'c');
cout<<"a的值是: "< cout<<"b的值是: "< cout<<"c的值是: "< cout<<"c1的值是: "< cout<<"d的值是: "< return 0;
}
默认初始化
string a;
这是默认初始化,string是一个类类型,每个类各自决定其初始化对象的方式,而且,是否允许不经初始化就定义对象也由类自己决定,如果类允许这种行为,它将决定对象的初始值到底是什么,绝大多数类都支持无需显式初始化而定义对象,这样的类提供了一个合适的默认值,string类就规定如果没有指定初值,就生成一个空串,所以打印a的值的时候没有内容。
声明函数
string b();
乍一看是直接初始化+没有参数
,其实不是,根据VSCode的代码提示,编译器把b看作一个函数:
因为所有的函数名都是蓝颜色的:
直接初始化
string c("abc");
string c1("a");
string d(10,'c');
上述代码是直接初始化,由此得出一个准则:对string进行直接初始化的时候,括号中一定要有值。
这个准则背后也蕴含了一个道理:
- 如果我们想赋予string变量一个初始值,那么我们肯定知道这个值是多少,所以我们要把这个值告诉编译器。
- 如果我们不想赋予string变量一个初始值,那么默认初始化就好了。
例外情况
如果一个类M重载了调用运算符,那么可以使用M()
的形式,这里和初始化没有任何关系,这里是调用了调用运算符。
参考资料:《c++ primer中文版》