C/C++易忽略的陷阱
konsy_dong
Java,C++,Python,linux
展开
-
C/C++——为什么类的静态成员函数在定义的时候不写static?
解释一:举个例子,Base是一个类,data是他的int型static数据成员,那么我们这么定义:int Base::data = 10;1、因为使用static数据成员时,都是Base::data。。。。这么来用的,编译器知道data是在类Base的作用域内,它会去查看data在类中是怎么生命的,所以在定义处加static是没有必要的; 2、那如果加上static,也就是:static int原创 2017-05-23 09:51:28 · 8155 阅读 · 2 评论 -
《C和指针》——宏中容易出现的错误
宏#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏( defined macro) 。下面是宏的声明方式:#define name(parameter-list) stuff其中, parameter-list (参数列表)是二个由逗号分隔的符号列表,它们可能出现在stuff 中。参数列表的左括号必须与name 紧邻。如果两者之间有任何空白存在,参原创 2017-04-22 17:22:07 · 809 阅读 · 0 评论 -
《C和指针》——带副作用的宏参数
先看一段程序#include <stdio.h>#define MAX(a,b) {(a)>(b)?(a):(b)}int main(){ int x = 5; int y = 8; int z = MAX(x++, y++); printf("x=%d, y=%d, z=%d\n", x, y, z); return 0;}这个打印的是什么? 结果是原创 2017-04-23 08:42:37 · 467 阅读 · 0 评论 -
C/C++——一个因为unsigned引发的大问题
首先来看一段代码(其实可以不看,直接看下面的重点),我也只是截取了其中一部分,是一个学长在刷LeetCode时自己写的算法,可能写的算法不能通过所有测试用例,但是在下面这个测试用例测试的时候,然后出现了bug。重点请看我注释的那几行就行了。haystack="aijkgrek";needle="i";int strStr(string haystack, string needle) {原创 2017-04-23 08:45:12 · 469 阅读 · 0 评论 -
C++——必须使用复制构造函数的情况
先看代码:#include <iostream>#include <string>using namespace std;class CMessage{public: char *ShowIt(){ return pmessage; } CMessage(const char *text = "Default message"){//默认构造函数原创 2017-04-24 15:37:22 · 558 阅读 · 0 评论 -
C/C++——C风格的字符串的指针指向的内存位置问题(易错)
首先来看一个问题:这个是我在帮人刷题时,遇到的一个错误,之前一直没注意,也是对指针的理解不深刻的原因吧,我把它简化了,也就不贴原题的代码。 我刚开始以为的会输出: hello C++ 结果输出的却是: hello ediot 下一部分给出问题原因#include <iostream>using namespace std;void changeInput(char* input){ i原创 2017-08-27 17:00:09 · 490 阅读 · 0 评论 -
C++——拷贝构造函数和赋值函数的注意点
每个类只有一个赋值函数,由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。 1.如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String的两个对象a,b为例,假设a.m_data的内容为“hello”,b.m_data的内容为“world”。 现将a赋给b,缺省原创 2017-12-28 17:15:51 · 530 阅读 · 0 评论