在for循环中进行Static_cast
static_cast in a for loop
我知道静态强制转换是在编译时处理的,但是在for循环的条件中进行静态强制转换呢?强制转换是在每次迭代中进行,还是在编译过程中只进行一次?我担心这个实现的成本。我知道编译器会自动强制类型转换,我只是试图删除警告。例如:
double limit = 10.0;
for(int i = 0; i < static_cast<int>(limit); i++)
{
...
}
警告是:"从'double'转换为'int'可能会改变其值。"
double
和int
不是一回事,它们通常需要不同的寄存器,转换通常不是免费的。如果编译器能够证明limit
在循环内没有改变,则可以将转换减少到在循环开始时完成一次。如果编译器可以证明limit
等于10.0
,那么静态强制转换可以在编译时被10
取代。
这取决于你的" ...
"代码。
对于这段代码,limit
在编译时是已知的。
编译器可以断定它可以在编译时执行一次static_cast
。你的编译器同事可能也想知道为什么你不让limit
const
。或者为什么它是从double
开始的。
double limit = 10.0;
for(int i = 0; i < static_cast<int>(limit); i++)
{
std::cout << i;
}
对于这个代码,limit
在编译时是未知的。
编译器必须在运行时执行static_cast
每个循环。你的编译器可能也想知道为什么你不让limit
const
。
double limit = 10.0;
for(int i = 0; i < static_cast<int>(limit); i++)
{
std::cin >> limit;
}
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- C++Cast运算符过载
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 收到错误"invalid use of non-static data member 'stu::n' "
- LNK1104:无法打开libpjproject-i386-Win32-vc14-Debug-Static.lib
- 我应该在 C++ 中何时/为什么使用 STATIC?
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- 如何处理Boost Spirit X3导致Visual Studio 2019 "static initialization order fiasco"?
- "static char __ = []() -> char"的含义
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 无法在 DLL 中链接 SDL2-static.lib
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 错误:"cast"未命名类型void setCastDescription(std::string
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- C++线程"Call to non-static member function without an object argument"
- 出现这种错误的原因是什么"invalid use of non-static data member "
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- static是如何使用ClassA::m_variable处理所有类对象的
- 在[expr.static.cast]/4中,术语"一个可行函数"指的是什么