1
sizeof(s)`:这个表达式求的是指针`s`本身的大小,而不是它指向的字符串的长度。在大多数现代计算机系统中,一个指针(无论是`char*`还是其他类型的指针)的大小通常是4字节(32位系统)或8字节(64位系统)。这里假设是32位系统,则`sizeof(s)`的结果是4字节。
- `sizeof(*s)`:这个表达式求的是`s`所指向的数据类型(在这里是一个字符`char`)的大小,既‘a’的大小,a是char类型,因此大小为1。`char`类型通常占1字节,所以`sizeof(*s)`的结果是1。
- `strlen(s)`:这个函数求的是从指针`s`开始直到遇到空字符`\0`为止的连续字符序列的长度。对于字符串字面量"abcde",它后面会自动附加一个空字符结束标记,所以字符串的长度是5个字符,`strlen(s)`的结果是5。
2
3
要使指针 p2
也指向 p1
所指向的对象 x
,正确的做法是直接将指针 p1
的值赋给 p2
,因为指针变量本身存储的是所指向对象的地址。
4
5
根据右结合性,*p[2]中的p先和[2]结合,所以它首先是个数组,再由于左边的*,这是个指针数组,由于没有初始化的指针是不会调用构造函数的,所以一共是1+3=4。
6
7
#include <iostream>
using namespace std;
class A {
public:
virtual void func1() {
cout << "A1" << endl;
}
void func2() {
cout << "A2" << endl;
}
};
class B : public A {
public:
void func1() {
cout << "B1" << endl;
}
void func2() {
cout << "B2" << endl;
}
};
int main() {
A *a = new B;
a->func1();
a->func2();
}
运行结果为?
8
C++规定=,[ ],(),->这四个运算符只能被重载为类的非静态成员函数,其他的可以被友元重载,主要是因为其他的运算符重载函数都会根据参数类型或数目进行精确匹配,这四个不具有这种检查的功能,用友元定义就会出错。
9
编译错不属于异常范畴内的
10
在编译时期进行。
11
B. 函数模板必须由程序员实例化为可执行的函数模板
这个描述是错误的。实际上,函数模板的实例化通常是由编译器自动完成的,无须程序员显式地进行实例化操作。当编译器遇到使用函数模板的代码,并且可以确定模板参数的具体类型时,它会自动生成针对这些特定类型的函数代码,这个过程称为隐式实例化。因此,选项B的陈述是不正确的。
12
#include<iostream>
using namespace std;
class AA {
public:
AA() { cout << "A"; }
~AA() { cout << "a"; }
};
class BB: public AA {
AA aa;
public:
BB() { cout << "B"; }
~BB() { cout << "b"; }
};
int main() {
BB bb;
return 0;
}
输出:AABbaa
没找到答案,我猜是先基类构造,然后是自己成员aa的构造,然后自己的构造函数。