如何将这个c++表达式解释为调用
How is this C++ expression interpreted as an invocation?
在"Inside the c++ Object Model"中,作者给出了下面的代码示例,该代码可能存在歧义,需要解析器提前解析:
…如果c++抛弃了C的声明语法,那么就不需要预先判断以下语句是pf的调用,而不是它的定义:
// don’t know if declaration or invocation // until see the integer constant 1024 int ( *pf )( 1024 );
他暗示这被解释为函数pf
的调用。我看不出pf
的声明是什么才能使它成为一个有效的调用
这是一个丑陋的int*
声明称为pf
被初始化为值1024。但是,如果没有显式强制转换,则此转换无效:
int ( *pf )((int*)1024);
所以问题中给出的行相当于:
int* pf = 1024;
要理解为什么,考虑int ((((*pf))));
与int* pf;
相同。你可以在声明符周围加上任意数量的圆括号。
在
T D
声明中,D
的形式为( D1 )
包含的declarator-id的类型与声明
中包含的declarator-id的类型相同。T D1
括号不会改变嵌入的声明符id的类型,但它们可以改变复杂声明符的绑定。
我看不出有任何理由认为这是函数调用。特别是考虑到它是从int
开始的。我可以看到它怎么可能是一个函数指针的声明,直到它看到整数字面值。例如,如果它是:
int ( *pf )(int);
这将是一个类型为指针的pf
的声明,该指针指向返回int
并接受单个类型为int
的参数的函数。
int ( *pf )( int);
-这是声明
相关文章:
- 请解释"函数1(p1,p2,p3);"的输出
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 被解释为低级别const的const对象的地址
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何从Stroustrup的C++书中解释这个正则表达式?
- 如何在C 中读取/解释复杂的表达式
- 为什么C++类型的表达式没有从左到右进行解释
- 需要解释 matlab 表达式
- 解释 c++ 中语句和表达式之间的区别
- 重载ostream操作符将如何解释重载操作符的表达式?
- 如何将这个c++表达式解释为调用
- 由于抽象模板arg的实例化,Boost::lambda表达式编译失败.任何解释和/或解决方法
- 编译器如何解释这个表达式
- 编译器如何根据优先级和关联性解释此表达式