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'
value
4.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