mirror of
https://github.com/CnTransGroup/EffectiveModernCppChinese.git
synced 2025-01-20 00:50:09 +08:00
commit
edb4b09fc4
@ -16,7 +16,7 @@ int x;
|
|||||||
|
|
||||||
别介意,让我们转换一个话题, 对一个局部变量使用解引用迭代器的方式初始化:
|
别介意,让我们转换一个话题, 对一个局部变量使用解引用迭代器的方式初始化:
|
||||||
````cpp
|
````cpp
|
||||||
template<typename T>
|
template<typename It>
|
||||||
void dwim(It b, It e)
|
void dwim(It b, It e)
|
||||||
{
|
{
|
||||||
while(b!=e){
|
while(b!=e){
|
||||||
|
@ -92,15 +92,15 @@ double calEpsilon();
|
|||||||
````cpp
|
````cpp
|
||||||
float ep = calEpsilon();
|
float ep = calEpsilon();
|
||||||
````
|
````
|
||||||
但是这几乎就是在说“我故意减少函数返回值的精度”。使用显式类型初始器惯用法我们可以这样:
|
但是这几乎没有表明“我确实要减少函数返回值的精度”。使用显式类型初始器惯用法我们可以这样:
|
||||||
````cpp
|
````cpp
|
||||||
auto ep = static_cast<float>(calEpsilon());
|
auto ep = static_cast<float>(calEpsilon());
|
||||||
````
|
````
|
||||||
同样的原因如果你想有一个浮点表达式,你故意的用int存储你也可以使用这个惯用法。假如你需要计算一个随机访问迭代器(比如std::vector,std::deque,std::array)中某元素的下标,你给它一个0.0到1.0的值表明这个元素离容器的头部有多远(0.5意味着位于容器中间)。进一步假设你很自信结果下标是int。如果容器是c,d是double类型变量,你可以用这样的方法计算容器下标:
|
处于同样的原因,如果你故意想用int类型存储一个表达式返回的float类型的结果,你也可以使用这个方法。假如你需要计算一个随机访问迭代器(比如std::vector,std::deque,std::array)中某元素的下标,你给它一个0.0到1.0的值表明这个元素离容器的头部有多远(0.5意味着位于容器中间)。进一步假设你很自信结果下标是int。如果容器是c,d是double类型变量,你可以用这样的方法计算容器下标:
|
||||||
````cpp
|
````cpp
|
||||||
int index = d * c.size();
|
int index = d * c.size();
|
||||||
````
|
````
|
||||||
但这里你故意把double转化为右边的int使这段代码表意不明,显式类型初始器可以帮助你正确表意:
|
但是这种写法并没有明确表明你想把double类型转换成int类型,显式类型初始器可以帮助你正确表意:
|
||||||
````cpp
|
````cpp
|
||||||
auto index = static_cast<int>(d * size());
|
auto index = static_cast<int>(d * size());
|
||||||
````
|
````
|
||||||
|
Loading…
Reference in New Issue
Block a user