【发布时间】:2014-08-22 03:12:13
【问题描述】:
背景
我正在尝试在 mac 上使用 clang 学习 C++11。
问题
正如书中所说,当float类型在算术中遇到int或小写时,后者会被转换为float。在以下情况下确实如此:
cout << 9.0 / 5 << endl;
结果产生1.8000,但是当我尝试使用后缀来确保常量的类型时,例如:
cout << 9.0f / 5i << endl;
结果产生1。我想知道为什么?背后是否有不同的规则或机制?
【问题讨论】:
-
你是怎么编译的?
i不是内置数字后缀(特别是,它并不代表int,正如您所相信的那样)。要编译,必须在程序的某处定义operator"" i();找到它,看看它的作用。 -
5i是一个虚数(即复数 0 + 5i)而不是整数 5。 -
@40two 不是开箱即用的。正如 Igor 所说,编译器不知道如何处理
5i。 -
@tgmath 似乎在 Clang v3.4 中,不一定是 coliru.stacked-crooked.com/a/60abcb7c6b065585
-
@IgorTandetnik 我想我误解了“我”。谢谢。但说实话,我在 test.cpp 中没有其他
operator"" i()。我只是简单地包含iostream并直接使用该行。
标签: c++ c++11 clang clang-extensions