C++ auto on int16_t casts to integer Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Data science time! April 2019 and salary with experience The Ask Question Wizard is Live!Are the “usual arithmetic conversions” and the “integer promotions” the same thing?Regular cast vs. static_cast vs. dynamic_castWhat are the differences between a pointer variable and a reference variable in C++?How can I profile C++ code running on Linux?The Definitive C++ Book Guide and ListWhat is the effect of extern “C” in C++?What is the “-->” operator in C++?Why do we need virtual functions in C++?Easiest way to convert int to string in C++C++11 introduced a standardized memory model. What does it mean? And how is it going to affect C++ programming?Why is reading lines from stdin much slower in C++ than Python?
2001: A Space Odyssey's use of the song "Daisy Bell" (Bicycle Built for Two); life imitates art or vice-versa?
Why wasn't DOSKEY integrated with COMMAND.COM?
Where are Serre’s lectures at Collège de France to be found?
Can a party unilaterally change candidates in preparation for a General election?
What do you call the main part of a joke?
Do wooden building fires get hotter than 600°C?
Compare a given version number in the form major.minor.build.patch and see if one is less than the other
How do I find out the mythology and history of my Fortress?
What's the meaning of "fortified infraction restraint"?
Wu formula for manifolds with boundary
How to convince students of the implication truth values?
Is this homebrew Lady of Pain warlock patron balanced?
Do I really need to have a message in a novel to appeal to readers?
Using et al. for a last / senior author rather than for a first author
What are the out-of-universe reasons for the references to Toby Maguire-era Spider-Man in ITSV
Denied boarding although I have proper visa and documentation. To whom should I make a complaint?
Would "destroying" Wurmcoil Engine prevent its tokens from being created?
How do pianists reach extremely loud dynamics?
An adverb for when you're not exaggerating
Delete nth line from bottom
Circuit to "zoom in" on mV fluctuations of a DC signal?
Amount of permutations on an NxNxN Rubik's Cube
What font is "z" in "z-score"?
Do square wave exist?
C++ auto on int16_t casts to integer
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
Data science time! April 2019 and salary with experience
The Ask Question Wizard is Live!Are the “usual arithmetic conversions” and the “integer promotions” the same thing?Regular cast vs. static_cast vs. dynamic_castWhat are the differences between a pointer variable and a reference variable in C++?How can I profile C++ code running on Linux?The Definitive C++ Book Guide and ListWhat is the effect of extern “C” in C++?What is the “-->” operator in C++?Why do we need virtual functions in C++?Easiest way to convert int to string in C++C++11 introduced a standardized memory model. What does it mean? And how is it going to affect C++ programming?Why is reading lines from stdin much slower in C++ than Python?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I am pretty new to C++17 and am attempting to understand the decltype
keyword and how it pairs with auto
.
Below is a snippet of code that produces an unexpected result.
#include <typeinfo>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
int16_t mid = 4;
auto low = mid - static_cast<int16_t>(2);
auto hi = mid + static_cast<int16_t>(2);
int16_t val;
cin >> val;
val = std::clamp(val,low,hi);
return 0;
Surprisingly, the compiler tells me there is a mismatch in clamp
and that low
and high
are int
. If I change auto
to int16_t
all is good in the world and all the types are int16_t
as expected.
The question I'm posing is, why does auto
cast low
and hi
to int
when all of the types are int16_t
? Is this a good use case for decltype
?
Even after reading cppreference.com, I don't fully understand how decltype
works, so excuse my ignorance.
c++ c++17 auto decltype
add a comment |
I am pretty new to C++17 and am attempting to understand the decltype
keyword and how it pairs with auto
.
Below is a snippet of code that produces an unexpected result.
#include <typeinfo>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
int16_t mid = 4;
auto low = mid - static_cast<int16_t>(2);
auto hi = mid + static_cast<int16_t>(2);
int16_t val;
cin >> val;
val = std::clamp(val,low,hi);
return 0;
Surprisingly, the compiler tells me there is a mismatch in clamp
and that low
and high
are int
. If I change auto
to int16_t
all is good in the world and all the types are int16_t
as expected.
The question I'm posing is, why does auto
cast low
and hi
to int
when all of the types are int16_t
? Is this a good use case for decltype
?
Even after reading cppreference.com, I don't fully understand how decltype
works, so excuse my ignorance.
c++ c++17 auto decltype
add a comment |
I am pretty new to C++17 and am attempting to understand the decltype
keyword and how it pairs with auto
.
Below is a snippet of code that produces an unexpected result.
#include <typeinfo>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
int16_t mid = 4;
auto low = mid - static_cast<int16_t>(2);
auto hi = mid + static_cast<int16_t>(2);
int16_t val;
cin >> val;
val = std::clamp(val,low,hi);
return 0;
Surprisingly, the compiler tells me there is a mismatch in clamp
and that low
and high
are int
. If I change auto
to int16_t
all is good in the world and all the types are int16_t
as expected.
The question I'm posing is, why does auto
cast low
and hi
to int
when all of the types are int16_t
? Is this a good use case for decltype
?
Even after reading cppreference.com, I don't fully understand how decltype
works, so excuse my ignorance.
c++ c++17 auto decltype
I am pretty new to C++17 and am attempting to understand the decltype
keyword and how it pairs with auto
.
Below is a snippet of code that produces an unexpected result.
#include <typeinfo>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
int16_t mid = 4;
auto low = mid - static_cast<int16_t>(2);
auto hi = mid + static_cast<int16_t>(2);
int16_t val;
cin >> val;
val = std::clamp(val,low,hi);
return 0;
Surprisingly, the compiler tells me there is a mismatch in clamp
and that low
and high
are int
. If I change auto
to int16_t
all is good in the world and all the types are int16_t
as expected.
The question I'm posing is, why does auto
cast low
and hi
to int
when all of the types are int16_t
? Is this a good use case for decltype
?
Even after reading cppreference.com, I don't fully understand how decltype
works, so excuse my ignorance.
c++ c++17 auto decltype
c++ c++17 auto decltype
edited Apr 12 at 5:32
Remy Lebeau
344k19270464
344k19270464
asked Apr 12 at 4:24
MaxMax
7491925
7491925
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
The problem isn't with auto
here. When you subtract two int16_t
values, the result is an int
. We can demonstrate it with this code here:
#include <iostream>
#include <cstdint>
using namespace std;
template<class T>
void print_type(T)
std::cout << __PRETTY_FUNCTION__ << std::endl;
int main()
int16_t a = 10;
int16_t b = 20;
print_type(a);
print_type(b);
print_type(a - b);
return 0;
a
and b
are both short int
s, but when you add or subtract them it produces a regular int
. This is to help prevent overflow / and is also for backwards compatibility.
add a comment |
This phenomenon is called the usual arithmetic conversions. It is defined in the C and C++ standards and (roughly said) converts anything smaller than an int
to an int
. It converts larger types as well. Take some time and read about it, you'll need it quite often.
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%2f55644479%2fc-auto-on-int16-t-casts-to-integer%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
The problem isn't with auto
here. When you subtract two int16_t
values, the result is an int
. We can demonstrate it with this code here:
#include <iostream>
#include <cstdint>
using namespace std;
template<class T>
void print_type(T)
std::cout << __PRETTY_FUNCTION__ << std::endl;
int main()
int16_t a = 10;
int16_t b = 20;
print_type(a);
print_type(b);
print_type(a - b);
return 0;
a
and b
are both short int
s, but when you add or subtract them it produces a regular int
. This is to help prevent overflow / and is also for backwards compatibility.
add a comment |
The problem isn't with auto
here. When you subtract two int16_t
values, the result is an int
. We can demonstrate it with this code here:
#include <iostream>
#include <cstdint>
using namespace std;
template<class T>
void print_type(T)
std::cout << __PRETTY_FUNCTION__ << std::endl;
int main()
int16_t a = 10;
int16_t b = 20;
print_type(a);
print_type(b);
print_type(a - b);
return 0;
a
and b
are both short int
s, but when you add or subtract them it produces a regular int
. This is to help prevent overflow / and is also for backwards compatibility.
add a comment |
The problem isn't with auto
here. When you subtract two int16_t
values, the result is an int
. We can demonstrate it with this code here:
#include <iostream>
#include <cstdint>
using namespace std;
template<class T>
void print_type(T)
std::cout << __PRETTY_FUNCTION__ << std::endl;
int main()
int16_t a = 10;
int16_t b = 20;
print_type(a);
print_type(b);
print_type(a - b);
return 0;
a
and b
are both short int
s, but when you add or subtract them it produces a regular int
. This is to help prevent overflow / and is also for backwards compatibility.
The problem isn't with auto
here. When you subtract two int16_t
values, the result is an int
. We can demonstrate it with this code here:
#include <iostream>
#include <cstdint>
using namespace std;
template<class T>
void print_type(T)
std::cout << __PRETTY_FUNCTION__ << std::endl;
int main()
int16_t a = 10;
int16_t b = 20;
print_type(a);
print_type(b);
print_type(a - b);
return 0;
a
and b
are both short int
s, but when you add or subtract them it produces a regular int
. This is to help prevent overflow / and is also for backwards compatibility.
answered Apr 12 at 4:36
J. Antonio PerezJ. Antonio Perez
2,793922
2,793922
add a comment |
add a comment |
This phenomenon is called the usual arithmetic conversions. It is defined in the C and C++ standards and (roughly said) converts anything smaller than an int
to an int
. It converts larger types as well. Take some time and read about it, you'll need it quite often.
add a comment |
This phenomenon is called the usual arithmetic conversions. It is defined in the C and C++ standards and (roughly said) converts anything smaller than an int
to an int
. It converts larger types as well. Take some time and read about it, you'll need it quite often.
add a comment |
This phenomenon is called the usual arithmetic conversions. It is defined in the C and C++ standards and (roughly said) converts anything smaller than an int
to an int
. It converts larger types as well. Take some time and read about it, you'll need it quite often.
This phenomenon is called the usual arithmetic conversions. It is defined in the C and C++ standards and (roughly said) converts anything smaller than an int
to an int
. It converts larger types as well. Take some time and read about it, you'll need it quite often.
answered Apr 12 at 5:09
Roland IlligRoland Illig
31k96493
31k96493
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%2f55644479%2fc-auto-on-int16-t-casts-to-integer%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