C++ C+中的字符串和整数乘法+;
我编写了以下代码C++ C+中的字符串和整数乘法+;,c++,C++,我编写了以下代码 #include <iostream> #define circleArea(r) (3.1415*r*r) int main() { std::cout << "Hello, World!" << std::endl; std::cout << circleArea('10') << std::endl; std::cout << 3.1415*'10'*'10' <&l
#include <iostream>
#define circleArea(r) (3.1415*r*r)
int main() {
std::cout << "Hello, World!" << std::endl;
std::cout << circleArea('10') << std::endl;
std::cout << 3.1415*'10'*'10' << std::endl;
std::cout << 3.1415*10*10 << std::endl;
return 0;
}
我的疑问是为什么是3.1415*'10'*'10'
value4.98111e+08
。我想当我把一个字符串乘以一个数字时,这个数字会转换成一个字符串,产生一个字符串。我是不是遗漏了什么
编辑:根据评论重新表述问题,我明白单引号和双引号是不一样的。所以,“1”代表一个字符。但是,“10”代表的是多字符文字;请注意单引号的使用。它有一个类型int
,其值由实现定义。参见“10”
,它是常量字符[3]
类型的文本,该数组的最后一个元素设置为NUL
通常它的值是
'1'*256+'0'
,在ASCII(C++支持的常见编码)中是49*256+48,即12592。'10'
不是字符串@InFlash能使编译器发出更多警告。@ DimChtz,我刚刚打印了“10”,它显示了12592的值,你能帮助我理解C++是如何评估这个值的:<代码> CyCurrAsA()/<代码>作为一个函数,而不是宏。您提供了一个可编译的示例,清楚地说明了您不了解的领域。数值不明显。我已经增加了。你所说的实现定义是什么意思?它是否依赖于编译器实现?读作:不是可移植代码所依赖的东西,或者在本例中,是真的。@InAFlash:请参阅@InAFlash:有些人甚至在开关
块中使用多字符作为大小写
标签,尽管我建议不要这样做,因为标签值是由实现定义的。见@Bathsheba,如往常一样精确回答+1:)
Hello, World!
4.98111e+08
4.98111e+08
314.15