如何将cin转换为int值:1;C++
how to cin to int _value:1; C++
我试过一个代码,它想用1字节的整数来保存一个数字,如何用cin获取值,用cout输出值
struct SoNguyen{
int _value:1;
void Input(){
// How I can cin value to _value;
}
void Output(){
// How I can cout value of _value;
}
}
谁得到小费了。!!
struct SoNguyen{
int _value:1;
void Input(){
int value;
std::cin >> value;
_value = value;
}
void Output(){
std::cout << _value;
}
};
顺便说一句,整数不是1个字节,而是1位宽(想想他们为什么将此功能称为位字段)。然而,位字段是糟糕的编程实践,应该尽可能避免。如果您需要宽度为1字节的成员,请使用std::int8_t
或signed char
。如果您需要一个宽度为1位的,请使用bool
(即使您浪费了7位,但在现代平台上这并不重要)。
实现类的输入/输出的一种更像C++的方法将包含运算符:
struct SoNguyen{
int _value:1;
};
template<typename CharT, typename CharTraits>
std::basic_istream<CharT, CharTraits>& operator>> (std::basic_istream<CharT, CharTraits>& Stream, SoNguyen& Object)
{
int Value;
Stream >> Value;
Object._value = Value;
return Stream;
}
template<typename CharT, typename CharTraits>
std::basic_ostream<CharT, CharTraits>& operator<< (std::basic_ostream<CharT, CharTraits>& Stream, SoNguyen const& Object)
{
return Stream << Object._value;
}
调用语法如下所示:
int main()
{
SoNguyen foo;
std::cin >> foo;
std::cout << foo;
}
因此,它看起来直观(因为相同的语法也适用于基本类型)和模块化(您可以对任何流进行写入和读取)。
您必须读取一个基元类型-int
、char
或short
。然后将基元类型分配给位字段。
void Input() {
int i;
std::cin >> i;
_value = i;
}
或
void Input() {
short i;
std::cin >> i;
_value = i;
}
等等。
输出是直接的。
void Output() {
std::cout << _value;
}
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 没有显式声明的int[]中的foreach
- 在c++中访问int到类对象的映射时出错
- 为什么我无法更改"set<set>"循环中的值<int>
- 长 长 int 不要 长 int 好
- C++程序在循环后给出奇怪的int值
- 如何计算数据类型的范围,例如int
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)