我们来看下面的代码:
#include// std::string using namespace std; int main() { //const::int i = 42; -> Error: "expected id-expression before 'int'" const::string str = "Foo"; // No error: why? }
为什么这段代码会编译?当XXX是基本类型时,错误"预期在XXX之前的id-expression"出现.
const::char c = 1; // error: expected id-expression before 'char' const::double d = 2; // error: expected id-expression before 'double' const::float f = 3; // error: expected id-expression before 'float' const::bool b = 4; // error: expected id-expression before 'bool'
TartanLlama.. 7
const::string
被解析为const ::string
.::string
意味着要string
在全局命名空间中查找,并且因为已经注入std
到全局命名空间中,std::string
所以找到并且一切都很花哨.
int
是一个内置的类型,是不是在任何命名空间,所以没有这样的东西::int
或者std::int
,因此错误.
const::string
被解析为const ::string
.::string
意味着要string
在全局命名空间中查找,并且因为已经注入std
到全局命名空间中,std::string
所以找到并且一切都很花哨.
int
是一个内置的类型,是不是在任何命名空间,所以没有这样的东西::int
或者std::int
,因此错误.