不为所动做更丢人的自己 level
获赞
25
粉丝
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; }
BewareMyPower: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 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务