笔试面试相关记录(11)

(1)

class Base {
public:
    Base() {
        cout << 1 << endl;
    }
    Base(Base && other) {
        cout << 2 << endl;
    }
    Base(const Base& other) {
        cout << 3 << endl;
    }
    Base& operator=(Base&& other) {
        cout << 4 << endl;
        return *this;
    }
    Base& operator=(const Base& other) {
        cout << 5 << endl;
        return *this;
    }
};
int main() {
    Base base1;
    Base base2 = base1;
    Base base3(base2);
    Base base4(std::move(base3));
    Base base5;
    base5 = base4;
    Base base6;
    base6 = std::move(base5);
    return 0;
}
输出:
1
3
3
2
1
5
1
4

(2)

#include 
#include 

using namespace std;

static int a = 1;

int main(){
	int b  = 2;
    char* c = NULL;
    int t;
    c = (char*)malloc(100*sizeof(char));
    std::time_t t1 = std::time(0);
    for (long long i = 0; i < 27000000000; i++) {
        b = 1;
    }
    std::time_t t2 = std::time(0);
    cout << "access b=" << t2-t1 << endl;
    t1 = std::time(0);
    for (long long i = 0; i < 27000000000; i++) {
        a = 1;
    }
    t2 = std::time(0);
    cout << "access a=" << t2-t1 << endl;
    t1 = std::time(0);
    for (long long i = 0; i < 27000000000; i++) {
        *c = 'a';
    }
    t2 = std::time(0);
    cout << "access c=" << t2-t1 << endl;
	return 0;
}

编译取消优化:g++ test.cpp -o test -O0
输出:
access b=47
access a=47
access c=75

(3)

int b = 2;
const int * a1 = &b;
const *int a2 = &b;  //声明错误
const int* const a3 = &b; //a3 和 a4 效果是一样的 
int const* const a4 = &b; 

(4)

int i, sum;
for (i = 0; i < 6; i++) 
    sum += i;
cout << sum << endl;
输出:15

(5)

char s[10]; s = "right";  //错误
char s[10];*s="right";    //错误
char *sp;*sp = "right";  //错误
char*sp = "right";  //正确

(6)

enum ts{1,2,3};  //错误

int x, y = 2, z = 3;
x = y+2 = z-5; //错误


char a = '\xaa';
char a = '\17';
char a = '\t';
下面引用网友的话:
C语言中 字符有两种表示表示 一种是单个字符 'a' ','等
另一种是用\开始的转义字符 比如‘\\' '\n' 这些有特定含义
还有一些字符不能用上述方式表示 此时'\123' 这个表示asc码为123的字符
因为C语言整数有几种表示表示方式
123的8进制为0153
123的16进制为 x7B
所以'\123'和'\0153' '\x7B'表示的是同一个字符
'\xaa'表示的是 10×16+10=170 就是asc为170的字符 这个字符无法显示

(7)

int i = 1, *p = &i, &r = i;
decltype(r+0) c;
decltype(*p + r) a;
decltype(*p) b;  //错误
decltype((i)) d;  //错误

(8)

struct A {
 char t:4;
//  char k:4;
//  unsigned short i:8;
//  unsigned long m;
};
sizeof(A) = 1

struct A {
 char t:4;
 char k:4;
//  unsigned short i:8;
//  unsigned long m;
};
sizeof(A) = 1

struct A {
 char t:4;
 char k:4;
 unsigned short i:8;
//  unsigned long m;
};
sizeof(A) = 2

struct A {
 char t:4;
 char k:4;
 unsigned short i:8;
 char q:4;
//  unsigned long m;
};
sizeof(A) = 4

struct A {
 char t:4;
 char k:4;
 unsigned short i:8;
 char q:4;
 char p:4;
//  unsigned long m;
};
sizeof(A) = 4

struct A {
//  char t:4;
//  char k:4;
//  unsigned short i:8;
 unsigned long m;
};
sizeof(A) = 8

struct A {
 char t:4;
//  char k:4;
//  unsigned short i:8;
 unsigned long m;
};
sizeof(A) = 16

struct A {
 char t:4;
 char k:4;
//  unsigned short i:8;
 unsigned long m;
};
sizeof(A) = 16

struct A {
 char t:4;
 char k:4;
 unsigned short i:8;
 unsigned long m;
};
sizeof(A) = 16

struct A {
//  char t:4;
//  char k:4;
//  unsigned short i:8;
    int e;
//  unsigned long m;
};
sizeof(A) = 4

struct A {
 char t:4;
//  char k:4;
//  unsigned short i:8;
    int e;
//  unsigned long m;
};
sizeof(A) = 8

struct A {
    int e;
 char t:4;
//  char k:4;
//  unsigned short i:8;
    
//  unsigned long m;
};
sizeof(A) = 8

struct A {
    unsigned long m;
    // int e;
 char t:4;
//  char k:4;
//  unsigned short i:8;
};
sizeof(A) = 16



你可能感兴趣的:(面试,算法,职场和发展)