Ami*_*rsh 13 c++ operator-overloading c++17
我在http://en.cppreference.com/w/cpp/language/operators上读到:
布尔逻辑运算符,运算符&&和运算符||
与内置版本不同,重载不会在右操作数之前对其左操作数进行排序,并且(直到C++ 17)无法实现短路评估.
(我强调).
找不到C++ 17的任何资源或代码示例,支持运算符&&和operator ||的短路.它与C++ 17参数包折叠表达式有关吗?尝试使用它,但无法为重载的运算符&&和||创建短路行为 用C++ 17倍表达式.
码:
class A {
bool val;
public:
A(bool b) : val(b) { cout << "A born as " << boolalpha << val << endl;}
template<typename ...Args>
bool operator&&(Args&&... args) {
return (val && ... && args.val);
}
};
int main() {
cout << boolalpha;
cout << ( A{false} && A{true} ) << endl;
cout << ( A{true} && A{false} ) << endl;
cout << ( A{false} && A{false} ) << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
A born as true
A born as false
false
A born as false
A born as true
false
A born as false
A born as false
false
Run Code Online (Sandbox Code Playgroud)
http://coliru.stacked-crooked.com/a/f0b5325899c2fe6b
注意:从C到17标志编译的当前gcc版本中也没有发生从左到右的顺序.
Nic*_*las 11
该声明不是关于短路评估.这是关于评估操作数的顺序.
Pre-C++ 17,用于评估重载的&&和||的操作数的顺序 是编译器定义的.C++ 17为&&和||定义了从左到右的显式评估顺序,无论它们是否过载.
短路评估仍然只适用于内置运营商.
请注意,在您引用的实际页面上,突出显示的部分是应用于特定版本的部分.那部分是关于排序顺序,而不是关于短路评估的部分.
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |