C++11 中的 python 海象运算符 (:=) 等效吗?

Ozz*_*zie 5 c++ python arduino c++11 python-3.8

最近我在Python中经常使用:=运算符,如下所示:

if my_object := SomeClass.function_that_returns_object():
    # do something with this object if it exists
    print(my_object.some_attribute)
Run Code Online (Sandbox Code Playgroud)

问题

有没有办法在 c++11 中不使用 来做到这一点stdlib?例如,在 arduino 草图中,如果我想使用可能返回零的方法,例如:

if(char * data = myFile.readBytes(data, dataLen))
{
    // do something
}
else
{
    // do something else
}
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 6

Python 的:=赋值表达式运算符(又名“海象”运算符)返回赋值的值。

C++ 的=赋值运算符(复制赋值移动赋值,以及其他赋值运算符)本质上做同样的事情,但以不同的方式。赋值的结果是对被赋值对象的引用,允许在进一步的表达式中计算该对象。

所以,相当于:

if my_object := SomeClass.function_that_returns_object():
    # do something with this object if it exists
    print(my_object.some_attribute)
Run Code Online (Sandbox Code Playgroud)

就像你展示的那样:

SomeType *object;
if ((my_object = SomeClass.function_that_returns_object())) {
    // do something with this object if it exists
    print(my_object->some_attribute);
}
Run Code Online (Sandbox Code Playgroud)

如果function_that_returns_object()返回空指针,则if计算结果object为 false,否则计算结果为 true。对于其他类型也可以做同样的事情,例如:

int value;
if ((value = SomeClass.function_that_returns_int()) == 12345) {
    // do something with this value if it matches
}
Run Code Online (Sandbox Code Playgroud)