2015-01-08 25 views
5

Aşağıdaki kod, dizenin son karakterini kaldıracak ve flip doğruysa veya r yanlışsa, l (küçük harf L) ekleyecektir. flip doğru olduğunda Üçlü işlemle ilgili tek davranış

std::stringstream ss; 
ss << code.substr(0, code.size() - 1); 
ss << flip ? "l" : "r"; 
std::string _code = ss.str(); 

Ancak, 1 ekler ve yanlış olduğunda, bu 0 ekler. Nasıl olur?

+0

eldeki probleme göre, ama neden 'std :: stringstream' burada kullanmak değil mi? Sadece dizeyi kopyalayın ve son karakteri 's [s.size() - 1] = (flip? 'L': 'r');' kullanarak ayarlayın. (Bu konuda std :: strings: std :: istringstream' ve std :: ostringstream 'kodumda sık görünmesine rağmen, std :: stringsream' kullandığımı sanmıyorum.) –

cevap

18

Öncelik sorunu.

ss << flip ? "l" : "r"; 

(ss << flip) ? "l" : "r"; 

kullanın

Bu operatör önceliği ile ilgisi var
ss << (flip ? "l" : "r"); 
3

anlamına gelir. <<, ? üzerinde önceliğe sahiptir; bu, flip'un önce ss'a eklendiği anlamına gelir.

beklenen davranış gitmelidir aşağıdadır:

ss << (flip ? "l" : "r");