C++ 在声明时显式调用无参数构造函数意味着什么
这个问题听起来有点奇怪,但请检查代码示例C++ 在声明时显式调用无参数构造函数意味着什么,c++,C++,这个问题听起来有点奇怪,但请检查代码示例 #包括 使用名称空间std; int main(){ 字符串a,b(),c(“测试”); //没问题 a=c; //tester.cpp:9:7:错误:函数“std::string b()的赋值” b=c; //tester.cpp:10:7:错误:从'std::string(*)({aka std::basic_string(*)()()}'到'char'的转换无效 a=b; //没问题 c=a; } 您可以看到,它看起来像是用默认构造函数创建的,但
#包括
使用名称空间std;
int main(){
字符串a,b(),c(“测试”);
//没问题
a=c;
//tester.cpp:9:7:错误:函数“std::string b()的赋值”
b=c;
//tester.cpp:10:7:错误:从'std::string(*)({aka std::basic_string(*)()()}'到'char'的转换无效
a=b;
//没问题
c=a;
}
您可以看到,它看起来像是用默认构造函数创建的,但实际上不是。所以我的问题是,
stringb()
是什么意思?将代码压缩为stringb()
,您在这里要做的是向名为b
的函数声明一个原型,该函数返回一个字符串
,并且不带任何参数
“复合声明”中的逗号混淆了这一点。将代码压缩为
字符串b()
,您在这里要做的是向名为b
的函数声明一个原型,该函数返回一个字符串
,并且不带任何参数
“复合声明”中的逗号混淆了这一点。将代码压缩为
字符串b()
,您在这里要做的是向名为b
的函数声明一个原型,该函数返回一个字符串
,并且不带任何参数
“复合声明”中的逗号混淆了这一点。将代码压缩为
字符串b()
,您在这里要做的是向名为b
的函数声明一个原型,该函数返回一个字符串
,并且不带任何参数
“复合声明”中的逗号混淆了这一点。它实际上是一个函数声明。可以声明本地函数,但不能定义它们。因此,不可能显式调用默认构造函数。它实际上是一个函数声明。可以声明本地函数,但不能定义它们。因此,不可能显式调用默认构造函数。它实际上是一个函数声明。可以声明本地函数,但不能定义它们。因此,不可能显式调用默认构造函数。它实际上是一个函数声明。可以声明本地函数,但不能定义它们。因此,无法显式调用默认构造函数。经典错误,但错误消息已经指出:
函数std::string b()
/。经典错误,但错误消息已经指出:函数std::string b()
/。经典错误,但是错误消息已经指出:函数std::string b()
/。经典错误,但是错误消息已经指出:函数std::string b()
/。称它为“逗号运算符”本身不是有点误导吗?这是一个由逗号分隔的声明符列表,逗号运算符是另一个野兽;遵循C++语法。@ Bathsheba:运算符出现在表达式中,而不是在声明器列表中。这确实是一个声明器列表<代码>整数i=1,2代码>无法编译,此处的逗号不是运算符。确定。我明白你的意思。我已经修正了。称它为“逗号运算符”本身不是有点误导吗?这是一个由逗号分隔的声明符列表,逗号运算符是另一个野兽;遵循C++语法。@ Bathsheba:运算符出现在表达式中,而不是在声明器列表中。这确实是一个声明器列表<代码>整数i=1,2代码>无法编译,此处的逗号不是运算符。确定。我明白你的意思。我已经修正了。称它为“逗号运算符”本身不是有点误导吗?这是一个由逗号分隔的声明符列表,逗号运算符是另一个野兽;遵循C++语法。@ Bathsheba:运算符出现在表达式中,而不是在声明器列表中。这确实是一个声明器列表<代码>整数i=1,2代码>无法编译,此处的逗号不是运算符。确定。我明白你的意思。我已经修正了。称它为“逗号运算符”本身不是有点误导吗?这是一个由逗号分隔的声明符列表,逗号运算符是另一个野兽;遵循C++语法。@ Bathsheba:运算符出现在表达式中,而不是在声明器列表中。这确实是一个声明器列表<代码>整数i=1,2代码>无法编译,此处的逗号不是运算符。确定。我明白你的意思。我修正了。事实上几乎是一个傻瓜,但我认为值得回答,因为逗号添加到近战中。事实上几乎是傻瓜,但我认为值得回答,因为逗号添加到近战中。事实上几乎是傻瓜,但我认为值得回答,因为逗号添加到近战中。事实上几乎是傻瓜,但我认为值得回答,因为逗号添加到近战中。