1. 논리 연산자 대신 키워드를 사용할 수 있습니다.
#define debug qDebug()<<
int main(int argc, char *argv[])
{
debug (true and false);
}
2. C ++는 표현식의 평가 순서를 명확하게 규정하지 않습니다. 표현식이 왼쪽에서 오른쪽으로 평가된다고 가정 할 수 없습니다. 이상한 실행 결과를 피하기 위해 동일한 표현식에서 동일한 객체를 동시에 읽고 쓰는 것을 피하십시오 ( v [i] = i ++ 이런 종류의 코드 작성을 피하는 것과 같이).
3. 쉼표 연산자, 논리 AND (&&), 논리 OR (||)은 왼쪽의 피연산자가 먼저 평가되도록 규정합니다.
- 쉼표 연산자의 일반적인 형식은 식 1, 식 2입니다. 평가 프로세스는 두 표현식의 값을 개별적으로 평가하고 표현식 2의 값을 전체 쉼표 표현식의 값으로 사용하는 것입니다. (예 : y = (x = a + b), (b + c);)
- &&는 왼쪽 피연산자의 평가 결과가 참일 때만 오른쪽 값을 평가합니다.
- || 오른쪽의 값은 왼쪽의 평가 결과가 거짓 인 경우에만 평가됩니다.
우선 순위 | 운영자 | 기술 | 연관성 |
---|---|---|---|
1 | :: | 범위 해결 | 왼쪽에서 오른쪽으로 |
2 | ++- | 접미사 자동 증가 / 접미사 자동 감소 | |
() | 대괄호 | ||
[] | 배열 첨자 | ||
. | 멤버 선택 (객체) | ||
−> | 멤버 선택 (포인터) | ||
삼 | ++- | 접두사 증가 / 접두사 감소 | 오른쪽에서 왼쪽으로 |
+ − | 더하기 / 빼기 | ||
! ~ | 논리 부정 / 비트 부정 | ||
(유형) | 강제 유형 변환 | ||
* | 포인터가 가리키는 값을 가져옵니다. | ||
& | 그래서 주소 | ||
크기 | 그저 그저 크기 | ||
new, new [] | 동적 메모리 할당 / 동적 어레이 메모리 할당 | ||
삭제, 삭제 [] | 동적 메모리 해제 / 동적 어레이 메모리 해제 | ||
4 | . *-> * | 멤버 개체 선택 / 멤버 포인터 선택 | 왼쪽에서 오른쪽으로 |
5 | * / % | 곱셈 / 나눗셈 / 나머지 | |
6 | + − | 플러스 / 마이너스 | |
7 | << >> | 왼쪽 비트 시프트 / 오른쪽 비트 시프트 | |
8 | <<= | 보다 작거나 같음 | |
>> = | 크거나 같음 | ||
9 | ==! = | 같음 / 같지 않음 | |
10 | & | 비트 및 | |
11 | ^ | 비트 XOR | |
12 | | | 비트 또는 | |
13 | && | AND 연산 | |
14 | || | OR 작업 | |
15 | ? : | 삼항 연산자 | 오른쪽에서 왼쪽으로 |
16 | = | 할당 | |
+ = − = | 더하기 후 할당 / 빼기 후 할당 | ||
* = / = % = | 곱셈 후 할당 / 나눗셈 후 할당 / 나머지를 취한 후 할당 | ||
<< = >> = | 왼쪽으로 비트 시프트 할당 / 오른쪽으로 비트 시프트 할당 | ||
& = ^ = | = | 비트 AND 연산 후 할당 / 비트 연산 후 비트 배타적 OR 할당 / 비트 OR 연산 후 할당 | ||
17 | 던지다 | 예외 발생 | |
18 | , | 반점 | 왼쪽에서 오른쪽으로 |
4、一些运算符可以重载:
5、重载函数形式是:operator后面加运算符,a+b相当于a.operator+(b)
6、预置含义:++a等价于a+=1和a=a+1,但不适用于此规则, 编译器不会根据A::operator+()和A::operator=()生成::operator+=()的定义。一个类默认带有赋值运算、取地址运算、顺序(逗号)运算的含义的,可以选择去除这些含义:
#define debug qDebug()<<
struct ceshi
{
int frist;
int second;
ceshi(int one = 0,int two = 0):frist{one},second{two}
{
}
void operator =(const ceshi&) = delete;
void operator &() = delete;
void operator ,(const ceshi&) = delete;
};
int main(int argc, char *argv[])
{
ceshi a(4,5);
ceshi b = a;
a = b;
&a;
a,b;
}
注:ceshi b = a;是调用(拷贝/移动)构造函数而不是operator=()。