不寻常的 static_cast 语法
Unusual static_cast syntax
我设法追踪到以下表达式的错误:
foo(static_cast<T>(a, b)); // Executes specialisation 1
右括号位置错误。正确的说法应该是:
foo(static_cast<T>(a), b); // Executes specialisation 2
我从未见过 static_cast 与形式 (a,b) 一起使用,也从未在任何地方见过它的描述。这是什么意思?前一条语句返回 b.
这与static_cast
无关,而是comma operator的"makes use"。它的结果是它的右边,所以
foo(static_cast<T>(a, b));
等同于
foo(static_cast<T>(b));
除非a
有其他效果(然后会被执行并丢弃它们的结果)。使用正确的编译器设置,您将收到以下警告:Live
static_cast
不是函数,它是关键字,所以 a, b
中的逗号不是参数分隔符;它是 comma operator。它评估 a
但丢弃结果。表达式的计算结果为 b
.
,
是逗号运算符,所以 a, b
就是 b
我设法追踪到以下表达式的错误:
foo(static_cast<T>(a, b)); // Executes specialisation 1
右括号位置错误。正确的说法应该是:
foo(static_cast<T>(a), b); // Executes specialisation 2
我从未见过 static_cast 与形式 (a,b) 一起使用,也从未在任何地方见过它的描述。这是什么意思?前一条语句返回 b.
这与static_cast
无关,而是comma operator的"makes use"。它的结果是它的右边,所以
foo(static_cast<T>(a, b));
等同于
foo(static_cast<T>(b));
除非a
有其他效果(然后会被执行并丢弃它们的结果)。使用正确的编译器设置,您将收到以下警告:Live
static_cast
不是函数,它是关键字,所以 a, b
中的逗号不是参数分隔符;它是 comma operator。它评估 a
但丢弃结果。表达式的计算结果为 b
.
,
是逗号运算符,所以 a, b
就是 b