不为所动做更丢人的自己 level
获赞
35
粉丝
0
关注
0
看过 TA
0
湖南信息职业技术学院
2018
C++
IP属地:未知
暂未填写个人简介
私信
关注
2018-06-12 18:31
已编辑
湖南信息职业技术学院 C++
#include "stdafx.h"  struct MyStruct {  MyStruct(int){}  MyStruct(){}  void fun(){}  };  int main() {  MyStruct a();  MyStruct b(1);  a.fun();//此处出错   有好心人能告诉我为什吗???  b.fun(); return 0; }
BewareMyPo...:C++的经典语法错误,都是C把声明和定义分离开的锅,而且可以随便声明,只要符合语法,因为声明的函数可能在其他源文件中定义。比如A func();编译器会怎么看呢?我这里命名为func可能会造成的一个假象,就是这是个函数。编译器不会这么看,他会把这句看成一个函数声明,返回类型为A,无输入参数。那么A a();呢?这么一看是不是又像声明一个A类型的变量a呢?然后两句话是一样的。在C++11中尽量使用大括号来代替圆括号来构造对象 // 类声明 struct A { A() {} A(int) {} A(const A&) {} }; // 对象构造 A a1{}; A a2{1}; A a3{a1}; 唯一需要注意的是如果有接受std::initializer_list类型的构造函数(比如STL的vector),大括号初始化会优先匹配这个。 vector<int> v1{3, 1}; // 存放3 1,而非1 1 1 vector<char> v2{3, 1}; // 存放3 1,而非1 1 1 vector<double> v3{3, 1.0}; // 存放3 1.0,而非1.0 1.0 1.0
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务