CS253: Software Development with C++

Spring 2018

Symbol Ambiguity

See this page as a slide show

CS253 Symbol Ambiguity

or

“Them there namespacies is trickier then I done thought!”

The __cplusplus symbol

% cp ~/Examples/version.cc .
% cat version.cc
#include <iostream>
int main() {
    std::cout << __cplusplus << '\n';
}

% g++ -std=c++98 version.cc && ./a.out
199711

% g++ -std=c++11 version.cc && ./a.out
201103

using namespace, C++98

#include <iostream>
#include <string>
#include <utility>

using namespace std;

void move(string s) {
    cout << "moving " << s << '\n';
}

int main() {
    cout << __cplusplus << '\n';
    move("umbrella");
}
199711
moving umbrella

using namespace, C++11

#include <iostream>
#include <string>
#include <utility>

using namespace std;

void move(string s) {
    cout << "moving " << s << '\n';
}

int main() {
    cout << __cplusplus << '\n';
    move("umbrella");
}
201103

using namespace, C++11

#include <iostream>
#include <string>
#include <utility>

using namespace std;

void move(string s) {
    cout << "moving " << s << '\n';
}

int main() {
    cout << __cplusplus << '\n';
    move("umbrella");
}
201103

Explicit std::, c++98

#include <iostream>
#include <string>
#include <utility>

void move(std::string s) {
    std::cout << "moving " << s << '\n';
}

int main() {
    std::cout << __cplusplus << '\n';
    move("umbrella");
}
199711
moving umbrella

Explicit std::, C++11

#include <iostream>
#include <string>
#include <utility>

void move(std::string s) {
    std::cout << "moving " << s << '\n';
}

int main() {
    std::cout << __cplusplus << '\n';
    move("umbrella");
}
201103
moving umbrella

Selecting using, c++98

#include <iostream>
#include <string>
#include <utility>

using std::string;
using std::cout;

void move(string s) {
    cout << "moving " << s << '\n';
}

int main() {
    cout << __cplusplus << '\n';
    move("umbrella");
}
199711
moving umbrella

Selecting using, C++11

#include <iostream>
#include <string>
#include <utility>

using std::string;
using std::cout;

void move(string s) {
    cout << "moving " << s << '\n';
}

int main() {
    cout << __cplusplus << '\n';
    move("umbrella");
}
201103
moving umbrella

☼☂⛅☁☔

Do you carry an umbrella every day, or only when the weather report predicts rain?

If you carry an umbrella every day, then you’re always dry, but you have to carry a stupid umbrella all the time.

If you only carry it when rain is predicted, then you’ll get wet once in a while. However, you don’t have to lug around an umbrella when you don’t need it.

It’s a trade-off. Which price do you want to pay? Constant carrying, or occasional moisture?

Trade-offs

Similarly …

    std::cout << x << std::endl;
    #include <iostream>
    using std::cin;
    using std::cout;
    using std::endl;
    using namespace std;

Trade-offs

Your choice! Personally, I find that:

User: Guest

Check: HTML CSS
Edit History Source

Modified: 2018-04-24T16:56

Apply to CSU | Contact CSU | Disclaimer | Equal Opportunity
Colorado State University, Fort Collins, CO 80523 USA
© 2018 Colorado State University
CS Building