一元加运算符在指针初始化中有什么用?
What is the use of unary plus operator in pointer initialization?
我知道 C 和 C++ 都是不同的语言,今天我在下面的程序中犯了一点错字,但该程序在各种 C++ 编译器(g++、clang、MSVC++)上编译得很好
考虑以下程序:
int main()
{
int s[]={3,6,9,12,18};
int* p=+s; // Observe this strange looking initialization due to use of unary + operator
}
以上程序在 C++ 中编译良好(参见现场演示 here) but not in C (See live demo here。)当我将其编译为 C 程序时,我的编译器 ( gcc 4.8.1 ) 出现以下错误。
[Error] wrong type argument to unary plus
一元加运算符在这里有什么用?它到底在这里做什么?为什么在 C 中不允许?
当调用 + 运算符时,s
将被视为指针而不是数组。
对于C,好像还没有引入这个概念
What purpose the unary plus operator serves here?
在 C++ 中,行为在第 5.3.1 节中列出:
[2] The result of each of the following unary operators is a prvalue.
[7] The operand of the unary +
operator shall have arithmetic, unscoped enumeration, or pointer type and the result is the value of the argument.
有时人们使用这个运算符来“强制”衰减,即在这种情况下是指向指针的数组。但它是相当多余的,因为转换是自动发生的。
What it does exactly here? Why it is not allowed in C?
因为特殊含义根本不存在
1) The operand of the unary + or - operator shall have arithmetic type;
......
2) The result of the unary + operator is the value of its (promoted)
operand. The integer promotions are performed on the operand, and the
result has the promoted type.
指针或数组不是算术类型。
我只见过在一元 + 运算符在 C++ 等 OOP 语言中被重载的情况下使用。它在 C 中没有任何用途,除了可能导致这样的错误,即指针被意外传递给宏或不期望的函数。
无论哪种方式编写代码都是一种令人讨厌的方式,如果有充分的理由,那么它应该附有原作者的解释性评论。
我知道 C 和 C++ 都是不同的语言,今天我在下面的程序中犯了一点错字,但该程序在各种 C++ 编译器(g++、clang、MSVC++)上编译得很好
考虑以下程序:
int main()
{
int s[]={3,6,9,12,18};
int* p=+s; // Observe this strange looking initialization due to use of unary + operator
}
以上程序在 C++ 中编译良好(参见现场演示 here) but not in C (See live demo here。)当我将其编译为 C 程序时,我的编译器 ( gcc 4.8.1 ) 出现以下错误。
[Error] wrong type argument to unary plus
一元加运算符在这里有什么用?它到底在这里做什么?为什么在 C 中不允许?
s
将被视为指针而不是数组。
对于C,好像还没有引入这个概念
What purpose the unary plus operator serves here?
在 C++ 中,行为在第 5.3.1 节中列出:
[2] The result of each of the following unary operators is a prvalue.
[7] The operand of the unary
+
operator shall have arithmetic, unscoped enumeration, or pointer type and the result is the value of the argument.
有时人们使用这个运算符来“强制”衰减,即在这种情况下是指向指针的数组。但它是相当多余的,因为转换是自动发生的。
What it does exactly here? Why it is not allowed in C?
因为特殊含义根本不存在
1) The operand of the unary + or - operator shall have arithmetic type; ......
2) The result of the unary + operator is the value of its (promoted) operand. The integer promotions are performed on the operand, and the result has the promoted type.
指针或数组不是算术类型。
我只见过在一元 + 运算符在 C++ 等 OOP 语言中被重载的情况下使用。它在 C 中没有任何用途,除了可能导致这样的错误,即指针被意外传递给宏或不期望的函数。
无论哪种方式编写代码都是一种令人讨厌的方式,如果有充分的理由,那么它应该附有原作者的解释性评论。