Function declaration with auto using new C++11 syntax but with auto& and without ->
consider the function definition below:
auto& Fnc1() { return someNonLocalVariable; }
Return type is not explicitly specified by -> in this case.
But there is the & after auto keyword.
Does this guarantee that a reference is returned instead of copy of the variable?
Is this a supported language feature (returning reference)?
With VS 2017, it works as I expect: Return a reference.
But I could not find any online source to verify.
c++ c++14 auto function-declaration return-type-deduction
add a comment |
consider the function definition below:
auto& Fnc1() { return someNonLocalVariable; }
Return type is not explicitly specified by -> in this case.
But there is the & after auto keyword.
Does this guarantee that a reference is returned instead of copy of the variable?
Is this a supported language feature (returning reference)?
With VS 2017, it works as I expect: Return a reference.
But I could not find any online source to verify.
c++ c++14 auto function-declaration return-type-deduction
This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.
– Sam Varshavchik
Jan 1 at 20:29
2
That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.
– Ron
Jan 1 at 20:29
usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context
– mami
Jan 1 at 20:33
2
The source
– Igor Tandetnik
Jan 1 at 20:36
auto
is for deducing the "base" type only, without CV-qualifiers or references.
– Some programmer dude
Jan 1 at 20:36
add a comment |
consider the function definition below:
auto& Fnc1() { return someNonLocalVariable; }
Return type is not explicitly specified by -> in this case.
But there is the & after auto keyword.
Does this guarantee that a reference is returned instead of copy of the variable?
Is this a supported language feature (returning reference)?
With VS 2017, it works as I expect: Return a reference.
But I could not find any online source to verify.
c++ c++14 auto function-declaration return-type-deduction
consider the function definition below:
auto& Fnc1() { return someNonLocalVariable; }
Return type is not explicitly specified by -> in this case.
But there is the & after auto keyword.
Does this guarantee that a reference is returned instead of copy of the variable?
Is this a supported language feature (returning reference)?
With VS 2017, it works as I expect: Return a reference.
But I could not find any online source to verify.
c++ c++14 auto function-declaration return-type-deduction
c++ c++14 auto function-declaration return-type-deduction
edited Jan 1 at 20:51
Deduplicator
34.7k64990
34.7k64990
asked Jan 1 at 20:27
mamimami
4916
4916
This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.
– Sam Varshavchik
Jan 1 at 20:29
2
That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.
– Ron
Jan 1 at 20:29
usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context
– mami
Jan 1 at 20:33
2
The source
– Igor Tandetnik
Jan 1 at 20:36
auto
is for deducing the "base" type only, without CV-qualifiers or references.
– Some programmer dude
Jan 1 at 20:36
add a comment |
This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.
– Sam Varshavchik
Jan 1 at 20:29
2
That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.
– Ron
Jan 1 at 20:29
usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context
– mami
Jan 1 at 20:33
2
The source
– Igor Tandetnik
Jan 1 at 20:36
auto
is for deducing the "base" type only, without CV-qualifiers or references.
– Some programmer dude
Jan 1 at 20:36
This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.
– Sam Varshavchik
Jan 1 at 20:29
This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.
– Sam Varshavchik
Jan 1 at 20:29
2
2
That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.
– Ron
Jan 1 at 20:29
That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.
– Ron
Jan 1 at 20:29
usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context
– mami
Jan 1 at 20:33
usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context
– mami
Jan 1 at 20:33
2
2
The source
– Igor Tandetnik
Jan 1 at 20:36
The source
– Igor Tandetnik
Jan 1 at 20:36
auto
is for deducing the "base" type only, without CV-qualifiers or references.– Some programmer dude
Jan 1 at 20:36
auto
is for deducing the "base" type only, without CV-qualifiers or references.– Some programmer dude
Jan 1 at 20:36
add a comment |
1 Answer
1
active
oldest
votes
Yes, this is the correct specification, and as Ron commented, became operational in C++14. C++11 did require trailing return type syntax (->
after the parameters).
See cppreference for more.
In a function declaration that does not use the trailing return type syntax, the keyword
auto
indicates that the return type will be deduced from the operand of its return statement using the rules for template argument deduction.
See also auto type deduction where they include an example using auto&
. You can think of this as being the same set of rules for declaring variables using the auto
keyword.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53998710%2ffunction-declaration-with-auto-using-new-c11-syntax-but-with-auto-and-without%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Yes, this is the correct specification, and as Ron commented, became operational in C++14. C++11 did require trailing return type syntax (->
after the parameters).
See cppreference for more.
In a function declaration that does not use the trailing return type syntax, the keyword
auto
indicates that the return type will be deduced from the operand of its return statement using the rules for template argument deduction.
See also auto type deduction where they include an example using auto&
. You can think of this as being the same set of rules for declaring variables using the auto
keyword.
add a comment |
Yes, this is the correct specification, and as Ron commented, became operational in C++14. C++11 did require trailing return type syntax (->
after the parameters).
See cppreference for more.
In a function declaration that does not use the trailing return type syntax, the keyword
auto
indicates that the return type will be deduced from the operand of its return statement using the rules for template argument deduction.
See also auto type deduction where they include an example using auto&
. You can think of this as being the same set of rules for declaring variables using the auto
keyword.
add a comment |
Yes, this is the correct specification, and as Ron commented, became operational in C++14. C++11 did require trailing return type syntax (->
after the parameters).
See cppreference for more.
In a function declaration that does not use the trailing return type syntax, the keyword
auto
indicates that the return type will be deduced from the operand of its return statement using the rules for template argument deduction.
See also auto type deduction where they include an example using auto&
. You can think of this as being the same set of rules for declaring variables using the auto
keyword.
Yes, this is the correct specification, and as Ron commented, became operational in C++14. C++11 did require trailing return type syntax (->
after the parameters).
See cppreference for more.
In a function declaration that does not use the trailing return type syntax, the keyword
auto
indicates that the return type will be deduced from the operand of its return statement using the rules for template argument deduction.
See also auto type deduction where they include an example using auto&
. You can think of this as being the same set of rules for declaring variables using the auto
keyword.
edited Jan 1 at 21:06
answered Jan 1 at 20:36
rsjaffersjaffe
3,95671632
3,95671632
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53998710%2ffunction-declaration-with-auto-using-new-c11-syntax-but-with-auto-and-without%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.
– Sam Varshavchik
Jan 1 at 20:29
2
That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.
– Ron
Jan 1 at 20:29
usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context
– mami
Jan 1 at 20:33
2
The source
– Igor Tandetnik
Jan 1 at 20:36
auto
is for deducing the "base" type only, without CV-qualifiers or references.– Some programmer dude
Jan 1 at 20:36