inn*_*nti 6 c++ visual-studio-2010 visual-c++ c++11
在C++ 11的标题中,有三个用于在数字和字符串之间进行转换的新函数.
std::string std::to_string(unsigned long long);
std::string std::to_string(long double);
std::string std::to_string(long long);
Run Code Online (Sandbox Code Playgroud)
第一个问题 - 为什么只有3个功能?那么简单的int或unsigned int等呢?
第二个问题 - 为什么to_string不会在下面的代码中抛出异常?
long double x = std::numeric_limits<long double>::quiet_NaN();
std::string i = std::to_string( x );
long double c = std::stold( i ); // i = "1.#QNAN"
Run Code Online (Sandbox Code Playgroud)
第三个问题 - 为什么c等于1.0?
" 只要它产生描述的行为,做你想做的...... "
所有固有的数值类型可以隐式转换为两种unsigned long long,long double或long long和仍持有所要求的精度,因此没有更多的重载是必要的.
该标准规定应该定义以下函数,但是只要它产生与所描述的相同的行为,则确认标准的lib可以自由地执行" 任何它想要的 ".
为什么要抛出异常?
std::numeric_limits<long double>::quiet_NaN();是一个有效值,并std::to_string (T)在标准中描述,以产生sprintf与使用适当的format-string调用相同的行为.
§21.5/6 数字转换
string to_string(int val);string to_string(unsigned val);string to_string(long val);string to_string(unsigned long val);string to_string(long long val);string to_string(unsigned long long val);string to_string(float val);string to_string(double val);
string to_string(long double val);..
返回:
- 每个函数返回字符串对象保持,将通过调用的sprintf来生成其自变量的值的字符表示(BUF,FMT,val)的用"的格式指定符%d "," %U "," %LD ",分别为" %lu "," %lld "," %llu "," %f "," %f "或" %Lf ",其中buf指定足够大小的内部字符缓冲区.
什么编译器c等于1.0?
NaN如果值的i字符串表示为NaN(不包含任何数字),则转换应该产生-value .
如果找不到合适的转换,则描述该函数抛出invalid_argument.
1.#QNAN尝试转换std::numeric_limits<long double>::quiet_NaN();为a 时MSVC会产生std::string.
使用std::stold它时将查找第一个无空白字符,然后使用找到的数字(仅在这种情况下1),因此c将等于1.0函数调用后.
| 归档时间: |
|
| 查看次数: |
633 次 |
| 最近记录: |