13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 232 — #270<br />

✐<br />

Capítulo 8. Constantes<br />

// Returning consts by value<br />

// has no meaning for built-in types<br />

int f3() { return 1; }<br />

const int f4() { return 1; }<br />

int main() {<br />

const int j = f3(); // Works fine<br />

int k = f4(); // But this works fine too!<br />

} ///:~<br />

Para los tipos básicos, no importa si el retorno es constante, así que debería evitar<br />

la confusión para el programador cli<strong>en</strong>te y no utilizar const cuando se devuelv<strong>en</strong><br />

variables de tipos básicos por valor.<br />

Devolver por valor como constante se vuelve importante cuando se trata con<br />

tipos definidos por el programador. Si una función devuelve un objeto por valor<br />

como constante, el valor de retorno de la función no puede ser un recipi<strong>en</strong>te 2<br />

Por ejemplo:<br />

//: C08:ConstReturnValues.cpp<br />

// Constant return by value<br />

// Result cannot be used as an lvalue<br />

class X {<br />

int i;<br />

public:<br />

X(int ii = 0);<br />

void modify();<br />

};<br />

X::X(int ii) { i = ii; }<br />

void X::modify() { i++; }<br />

X f5() {<br />

return X();<br />

}<br />

const X f6() {<br />

return X();<br />

}<br />

void f7(X& x) { // Pass by non-const refer<strong>en</strong>ce<br />

x.modify();<br />

}<br />

int main() {<br />

f5() = X(1); // OK -- non-const return value<br />

f5().modify(); // OK<br />

//! f7(f5()); // Causes warning or error<br />

// Causes compile-time errors:<br />

//! f6() = X(1);<br />

//! f6().modify();<br />

2 N. del T.: «recipi<strong>en</strong>te» corresponde con el término lvalue que se refiere a una variable que puede ser<br />

modificada o a la que se le puede asignar un valor.<br />

232<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!