x> y> new T:syntax的可能含义

RDG*_*ida 2 c++ comparison comparison-operators c++11

我正在阅读这篇关于最有用的C++ 11特性的文章,我在上一节中碰到了这一块代码:

 if(_size != copy._size)
 {
    _buffer = nullptr;
    _size = copy._size;
    _buffer = _size > 0 > new T[_size] : nullptr;
 }
Run Code Online (Sandbox Code Playgroud)

我习惯于考虑最后一行,(_size > 0) > other_Value但在这种情况下,右操作数是一个new声明.我真的无法理解它的意义.另外,: nullptr参考什么?有没有初始化的东西nullptr?如果有,那是什么?

For*_*veR 10

我想,这是错误的片段.它应该是

_buffer = _size > 0 ? new T[_size] : nullptr;
Run Code Online (Sandbox Code Playgroud)

这基本上是三元运算符.如果_size> 0,则将_size分配大小为T的数组的内存,在其他情况下nullptr将分配给_buffer.而且它不是C++ 11的功能,因为在C++ 98中它可以是公正的

_buffer = _size > 0 ? new T[_size] : 0; // or NULL, or (void*)0.
Run Code Online (Sandbox Code Playgroud)

  • 由于`?`在大多数(美国)键盘的">"右侧,这是一个非常容易想象的错字. (2认同)