C++ 运算符优先级
运算符优先级顺口溜:淡云一笔,鞍落三服。
淡:单目运算符;
云:算数运算符;
一:移位运算符;
笔:比较运算符;
鞍:按位运算符;
落:逻辑运算符;
三:三目运算符;
服:赋值运算符。
作者:雨墨初晨
来源:牛客网
字符串赋值
char a[5], *p = q;
p = "abcd"
P是字符型指针,将"abcd"的地址给了P,也就是P指向"abcd"的首地址,也就是 指向'a'的地址;
a是一个字符数组,只能在声明的时候初始化,即char a[5]="abcd"
声明数组后再赋值是违法的,即a="abcd",因为数组是一个不可修改的左值
但是char *p=a ,p就是一个char *指针,是一个可修改的左值,所以可以将其指向新的字符串"abcd"
作者:牛客351509045号
来源:牛客网
在构造函数中调用虚函数
cpp
#include <iostream>
using namespace std;
class A{
public:
A ():m_iVal(0){test();}
virtual void func() { std::cout<<m_iVal<<' ';}
void test(){func();}
public:
int m_iVal;
};
class B : public A{
public:
B(){test();}
virtual void func(){
++m_iVal;
std::cout << m_iVal << ' ';
}
};
int main(int argc ,char* argv[]){
A*p = new B;
p->test();
return 0;
}
在父类的构造函数中调用虚函数,还是会执行父类的构造函数,不会跑到子类中去,即使有vitual,因为此时父类都还没有构造完成,子类也就还没有构造。本题的输出顺序为:父类构造函数、子类构造函数、指向子类的父类指针(覆盖、多态),所以结果为012.
作者:wentguo
来源:牛客网
不可重载运算符包括 ?: :: . .* ,sizeof
作为函数参数的数组名退化为指针
cpp
char str[] = "http://www.renren.com" //(21个字符)
char *p = str ;
sizeof (str ) = ?//(1)
sizeof (p) = ?//(2)
void Foo (char str[100]){
sizeof(str) = ?//(3)
}
void *p = malloc(100);
sizeof(p) = ?//(4)
22,4,4,4,
八进制
cpp
int main() {
int i = 010, j = 10;
printf("%d,%d\n", ++i, j--);
return 0;
}
010 是八进制表示的