Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exercise 2.15(b) confusing #71

Closed
Kherrisan opened this issue Aug 19, 2016 · 6 comments
Closed

Exercise 2.15(b) confusing #71

Kherrisan opened this issue Aug 19, 2016 · 6 comments
Labels

Comments

@Kherrisan
Copy link

Do you mean 1.01 (double literal) is not an object,so the reference can't be bound to 1.01?
But const int &i=1.01 is valid.So i think the necessity of const should be the answer.

@pezy
Copy link
Owner

pezy commented Aug 20, 2016

Do you mean 1.01 (double literal) is not an object,so the reference can't be bound to 1.01?

yes.

But const int &i=1.01 is valid

const reference is different from plain reference.

const int &i = 1.01; // i refers to temporary with value 2.0

Thus, in your example, the const reference is not bound to double literal, rather than the temporary(object).


please check:

http://en.cppreference.com/w/cpp/language/reference_initialization
http://stackoverflow.com/a/2088337/1155235

FYI

@husy8
Copy link
Contributor

husy8 commented Jan 2, 2017

Hi, @pezy,
I got a question about a reference you have mentioned above. At the end of his answer, he asserted that:

... Any name which contains adjacent underscores is reserved to the C++ implementation.

While I try to compile codes like:

int main()
{
    int __A = 9;
    int const& ref = __A;
    int __B = ref + 6;
    int const& another_ref = __B;
    int test__variable_name = 88;
    std::cout << ref << " " << another_ref << " " << test__variable_name << std::endl;
    return 0;
}

gcc-c++ compiler (version:4.9.2) don't throw a(n) warning or error to me as I expect and its outputs are correct. And of course I know that assign this kind of variable name is inappropriate, I just wanna know whether modern C++ explicitly forbid such behaviors or not.

@pezy
Copy link
Owner

pezy commented Jan 3, 2017

I just wanna know whether modern C++ explicitly forbid such behaviors or not.

No.

It's just a coding style... (established by usage)
You can free to use underscores to start your variable names, but we do not recommend doing this, cause the style is a "privilege" of compiler implementation.

@husy8
Copy link
Contributor

husy8 commented Jan 3, 2017

@pezy Got it and thank you. I found that almost, well actually every variable name I can find in C++ headers start with underscores, like _Ptr or _Rb_tree_node . Is that what you guys call "compiler implementation" or maybe I just make a mistake?

@pezy
Copy link
Owner

pezy commented Jan 3, 2017

Is that what you guys call "compiler implementation"

Exactly. 😄

@husy8
Copy link
Contributor

husy8 commented Jan 3, 2017

@pezy A big thanks!

@pezy pezy added the question label Apr 4, 2017
@pezy pezy closed this as completed Apr 4, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants