最近碰見一道
c++面試題,具體記不太清了,大概是問:
(x, x+20), x+29
這個表示式的值,顯然多數人會回答是
x+29
,不過面試官給的答案是
x+20。
呵呵,他給出了驗證**
int main()
列印出的結果是
21,的確是
x+20
的取值。
驗證的結果的確是我們錯了,可是大家是不是覺得有些問題。
給大家看個東西,也許問題就有答案了。
precedence
operator
description
example
associativity
1 ()
->.::
++--
grouping operator
array access
member access from a pointer
member access from an object
scoping operator
post-increment
post-decrement
(a + b) / 4;
array[4] = 2;
ptr->age = 34;
obj.age = 34;
class::age = 2;
for( i = 0; i < 10; i++ ) ...
for( i = 10; i > 0; i-- ) ...
left to right
2 !
~++---
+*&(type)
sizeof
logical negation
bitwise complement
pre-increment
pre-decrement
unary minus
unary plus
dereference
address of
cast to a given type
return size in bytes
if( !done ) ...
flags = ~flags;
for( i = 0; i < 10; ++i ) ...
for( i = 10; i > 0; --i ) ...
int i = -1;
int i = +1;
data = *ptr;
address = &obj;
int i = (int) floatnum;
int size = sizeof(floatnum);
right to left
3 ->*.*
member pointer selector
member pointer selector
ptr->*var = 24;
obj.*var = 24;
left to right
4 *
/%
multiplication
division
modulus
int i = 2 * 4;
float f = 10 / 3;
int rem = 4 % 3;
left to right
5 +
- addition
subtraction
int i = 2 + 3;
int i = 5 - 1;
left to right
6 <<
>>
bitwise shift left
bitwise shift right
int flags = 33 << 1;
int flags = 33 >> 1;
left to right
7 <
<=
>
>=
comparison less-than
comparison less-than-or-equal-to
comparison greater-than
comparison geater-than-or-equal-to
if( i < 42 ) ...
if( i <= 42 ) ...
if( i > 42 ) ...
if( i >= 42 ) ...
left to right
8 ==
!= comparison equal-to
comparison not-equal-to
if( i == 42 ) ...
if( i != 42 ) ...
left to right
9 &
bitwise and
flags = flags & 42;
left to right
10 ^
bitwise exclusive or
flags = flags ^ 42;
left to right
11 |
bitwise inclusive (normal) or
flags = flags | 42;
left to right
12 &&
logical and
if( conditiona && conditionb ) ...
left to right
13 ||
logical or
if( conditiona || conditionb ) ...
left to right
14 ? :
ternary conditional (if-then-else)
int i = (a > b) ? a : b;
right to left
15 =
+=-=
*=/=
%=&=
^=|=
<<=
>>=
assignment operator
increment and assign
decrement and assign
multiply and assign
divide and assign
modulo and assign
bitwise and and assign
bitwise exclusive or and assign
bitwise inclusive (normal) or and assign
bitwise shift left and assign
bitwise shift right and assign
int a = b;
a += 3;
b -= 4;
a *= 5;
a /= 2;
a %= 3;
flags &= new_flags;
flags ^= new_flags;
flags |= new_flags;
flags <<= 2;
flags >>= 2;
right to left
16 ,
sequential evaluation operator
for( i = 0, j = 0; i < 10; i++, j++ ) ...
left to right
呵呵,「
=」「,」都是運算子,而且其優先順序都很低,但是「
=」還是比「,」高了一點點,那麼上面的問題就好解決了。
y = (x, x+20), x+29;
上面這一行其實相當於
(y = (x, x+20)), x+29;
y表示的只能是
x, x+20
這個表示式的值,考官的驗證方法不對,應該寫成
y =( (x, x+20), x+29);
再試一下,果然結果是
30,是
x+29
的值了。
其實大家在這個問題上的觀點是對的,把問題做對了就完了嗎,碰見新的問題還是要思考一下的。
關於Jsoup的乙個小問題
利用jsoup可以實現對網頁資訊進行有效解析和提取,例如有網頁內容如下 hello,jsoup jsoup的官方 利用jsoup提取標籤的內容,如下 document doc null trycatch ioexception ioe 提取標籤的內容 string strtitle doc.sele...
乙個關於選擇的小問題
以前看過這樣乙個問題 乙個人參加有獎答題,主持人給出了a b c三個選項。這個不知道問題的答案,就隨便選了乙個選項。然後主持人排除了剩下兩個答案中的乙個,告訴這個人有一次改變自己選項的機會。請問 這時候這個人該不該改變自己的選項?剛看到這個問題,我的第一反映是完全沒必要,因為既然排除了乙個錯誤選項,...
關於指標的乙個小問題
任務 c primer 4th 習題5.18 編寫程式定義乙個vector物件,其每個元素都是指向string型別的指標,讀取該vector物件,輸出每個string的內容及其相應的長度。自己的方法 string s string sarr 10 vector內的每個元素都是指向string型別的指...