【发布时间】:2021-11-27 14:17:03
【问题描述】:
当尝试使用整数和字符串进行三元运算时,例如:
for (int num = 0; num < 100; num++) {
cout << (i % 10 == 0) ? "Divisible by 10" : num;
}
您最终会遇到以下异常
E0042:操作数类型不兼容(“const char*”和“int”)
如果您尝试通过执行(const char*)num 将num 转换为const char*,您最终会遇到访问冲突。
如果你改用(const char*)num&,你会得到与该值对应的ASCII字符。
对于大于 10 的数字,如何快速将该整数转换为字符串? (最好在同一行)
【问题讨论】:
-
cout << (i % 10 == 0) ? std::string("Divisible by 10") : std::to_string(num);或者因为"Divisible by 10"可以转换为std::string:cout << (i % 10 == 0) ? "Divisible by 10" : std::to_string(num); -
抛弃三元运算符并使用 if 语句。
if (i % 10) std::cout << num; else std::cout << "Divisible by 10"; -
无论如何它都会被转换为某种“字符串”,所以我只会在遇到实际性能问题并且知道(通过分析)这个函数是原因时才考虑寻找更快的东西
-
有没有更快的方法来做到这一点,也许不使用字符串?你有没有分析一个优化的构建每种方式需要多长时间?这是确定性能影响的最佳方式。
-
@Keegan:在性能方面击败
std::string是多么困难,您会惊讶。例如,std::string( "Divisible by 10" )不太可能首先使用任何动态内存分配。
标签: c++ string casting type-conversion conditional-operator