【发布时间】:2022-10-14 23:09:29
【问题描述】:
我的问题是:
- 为什么
(void)负责返回不同的值?到底发生了什么?struct S { int operator,(int) { return 0; } }; std::cout << (S(), 42) << '\n'; // prints '0' std::cout << ((void) S(), 42) << '\n'; // prints '42'
【问题讨论】:
标签: c++
我的问题是:
(void) 负责返回不同的值?到底发生了什么?
struct S {
int operator,(int) { return 0; }
};
std::cout << (S(), 42) << '\n'; // prints '0'
std::cout << ((void) S(), 42) << '\n'; // prints '42'
【问题讨论】:
标签: c++
它将临时的S 转换为void,因此对于(void) S(), 42,将调用内置的逗号运算符,因为逗号运算符将返回第二个操作数42,然后打印出来。
【讨论】:
(void) 在这里用于消除编译器关于不处理来自S() 的返回值的警告。
由于这是通过逗号运算符完成的:
((void) S(), 42)
它将是右侧,42,即表达式的值。
【讨论】:
这里的问题是逗号运算符已重载。
所以第一行:
(S(), 42)
将调用此逗号运算符,因为参数是匹配此重载的 S 和 int。
【讨论】: