Meaning of I(I())
Meaning of I(I())
示例代码:
typedef int I;
struct X{ X(int); };
int main()
{
int(int());
X(X());
I(I());
}
行int(int());
是使用函数式强制表示法的表达式 - 它是使用值初始化int
初始化的临时int
。
行X(X());
是一个名为X
的函数的声明,该函数不带返回结构X
的参数。
我的问题是:这里I(I())
的含义是什么? 标准中的哪些规则决定了这三种情况之间的含义差异?
该规则规定,如果构造是声明或语句的模糊语法,则将其视为声明。
[stmt.ambig] 1 涉及表达式语句和声明的语法存在歧义:表达式- 以函数式显式类型转换 (5.2.3( 作为其最左侧子表达式的语句可以是不可分割的 可从第一个声明符以 (.在这些情况下,该语句是 声明。
X(X());
是不明确的,因为它可以是强制转换或函数声明,因此它被视为声明。
int(int());
不能是函数声明,因为int
作为关键字,不是函数的有效名称。所以,没有歧义,这是一个演员阵容。
同样,I(I());
不能是函数声明,因为虽然不是关键字,但I
也不是有效名称,因为它会将类型I
重新声明为函数,这是不允许的,因此它是强制转换。
相关文章:
- Usages of std::move
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 具有变量Number of Arguments的std::函数的矢量
- Capacity of a deque
- Deprecation of _writeBarrier()
- constexpr begin of a std::array
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- C++ "error: invalid use of void expression"
- 我看到"use of undeclared identifier"错误,有人可以告诉我如何解决它吗?
- 赛通"Cannot take address of memoryview slice"
- C++ Version Of Double.longBitsToDouble
- 收到错误"invalid use of non-static data member 'stu::n' "
- Meaning of I(I())
- C++ meaning of [ ]
- The Meaning of -1.#IND
- Meaning of (void (*)(void *))
- C++. Meaning of var1 = new (_field) Constructor()
- The meaning of (*rhs.m_pData)
- C++ : Meaning of const char*const*