碰到问题就要记录下来,防止遗忘吧。
文章目录
一、VS中的命令行参数
今天在运行代码的时候,碰都了下面的情况:
// 解析命令行参数
if (pcl::console::find_argument (argc, argv, "-h") >= 0)
{
printUsage (argv[0]);
return 0;
}
我可能是不够熟悉VS中的命令行参数输入的设置,所以到网上搜了半天*_*,不过最后还是找到了,如下图所示:
二、内联函数和宏
宏的实现主要依赖于C预处理器的工作,但是预处理器的一个很大的缺点就是它并不了解C++语言的代码规范,也就是它只能进行简单的文本替换;所以为了使得宏能够被合理的运用到C++程序中去,就出现了内联函数,而他与原来的宏之间最大的区别在于“内联函数”是由C编译器来实现的,这就解决了宏只是形似函数的问题,因为编译器了解C++代码规范,它是以函数来运行还是以内联函数(宏)的形式来运行就看编译器来怎么选择了,我们只需要将函数声明为inline即可。因此,在C++中我们应永远不使用宏,只使用内联函数。
任何在类中定义的函数自动地成为内联函数,但也可以使用inline关键字放在类外定义的函数前面使之成为内联函数。但为了使之有效,必须使函数体和声明结合在一起,否则,编译器将它作为普通函数对待。形如:
inline int max(int x,int y);
inline int max(int x,int y)
{
return x>y?x:y;
}
内联代码的确占用空间,但假如函数较小,这实际上比为了一个普通函数调用而产生的代码(参数压栈和执行CALL)占用的空间还少。
在头文件里,内联函数默认为内部连接——即它是 static,并且只能在它被包含的编译单元看到。因而,只要它们不在相同的编译单元中声明,在内联函数和全局函数之间用同样的名字也不会在连接时产生冲突(类似于重载)。
总的来说,就是内联函数其实就是“懂得C++代码规范的宏”,而且内联函数还有个好处就是我们只管声明内联函数inline即可,使不使用它由编译器来进行决定。
三、初始化和赋值
很长时间我都认为初始化和赋值是一样的,但是其实并不是。在类中,初始化的实现在进入构造函数之前,而赋值则是进入构造函数之后(这里一般指非内置类型object C++)。所以可以使用成员初始化列表来初始化成员变量,而不是构造函数。
point(int x,int y)
:x(x),y(y) //使用初始化列表对成员变量进行初始化,未进入构造函数中
{
}
point(int x,int y)
{
x=x; //使用赋值的方法对成员变量进行赋值,需要进入构造函数中
y=y;
}
参考书籍:《C++编程思想》《Effective C++》
原文地址:https://blog.csdn.net/dayuhaitang1/article/details/105333703
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。