初始化,然后单行输出



PHP

<?php 
    $x = 10; 
    echo $x = 20;
?>


c++

#include<iostream>
using namespace std;
int main(){
    int x = 10;
    cout << x = 20;
    return 0;
}

为什么在php中初始化然后输出一行就行了,而在c++中却不起作用?

  • 这:cout << x = 20;而不是初始化。初始化是将初始值分配给一个变量,因此在您的情况下,它是在第一个字符串中完成的:int x = 10;
  • 你有两行PhP,而不是一行
  • C++中发生的事情是因为运算符的优先级

运算符优先级基本上取决于运算符的执行顺序。这就像在数学中,*/发生在+-之前。

C++中的operator<<的优先级高于operator=,因此它将首先执行,然后才发生operator=

操作员优先级表

是否工作

#include<iostream> 
using namespace std;  
int main(){
      int x = 10;
      cout << (x = 20);
} 

因为运算符的优先级不同。

"运算符的优先级有时是我们认为理所当然的,特别是如果我们完全熟悉并熟悉常见算术运算符的标准优先级规则。但过于顺从可能会使我们处于某种危险之中,尤其是在C++这样的语言中,它有如此多的运算符,保持警惕是值得的。"

作为一个简单的例子,请注意,从表中可以看出,输入/输出运算符(>>和<<)的优先级高于关系运算符,但低于算术运算符。这意味着像"

http://cs.stmarys.ca/~porter/csc/ref/cpp_operators.html


你的c++代码根本无法编译抛出:

a.cpp: In function 'int main()':
a.cpp:6:17: error: no match for 'operator=' in 'std::cout.std::basic_ostream<_CharT, _Traits>::operator<< [with _CharT = char, _Traits = std::char_traits<char>](x) = 20'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/include/g++-v4/iosfwd:86:11: note: candidate is: std::basic_ostream<char>& std::basic_ostream<char>::operator=(const std::basic_ostream<char>&)

您必须将代码放在方括号中才能进行编译。当您这样做时,您将获得与php相同的输出。

我很惊讶它为您编译,因为std::cout << x = 20;与( std::cout << x ) = 20相同并且std::cout << x的结果不是左值。然而,如果您希望进行这样的初始化,这无论如何都是个坏主意,那么您可以执行std::cout << ( x = 20 )。但是请不要这样做。这使得读取源代码变得困难,而且无论如何也不会提高性能。这样简单的优化现在由编译器完成。

最新更新