gpt4 book ai didi

c++ - 正在初始化类型为 "int &"的引用(不是 const 限定的),其值是 "bool"类型的一些 hack?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:06 24 4
gpt4 key购买 nike

我遇到了这个 C++ 代码 here :

  // round alternate
// Bias: none for sequential calls
bool _is_up = false;
template <typename FloatType>
FloatType roundalternate( const FloatType& value, int& is_up = _is_up )
{
if ((is_up != is_up))
return roundhalfup( value );
return roundhalfdown( value );
}

这让我很困惑,这应该如何工作?这应该如何在每次调用此函数时进行交替调用?

这段代码是完全错误的,还是由于某些编译器的怪异而应该工作的?它似乎用 g++ 编译得很好,但我现在无法重现。icc 不接受它:

rounding.h(183): error: a reference of type "int &" (not const-qualified) cannot be initialized with a value of type "bool"
FloatType roundalternate0( const FloatType& value, int& is_up = _is_up )
^

更新g++ 似乎也不接受它(在 Ben Voight 的回答后更新以澄清:g++ 可以编译普通文件(icc 不能),但如果您尝试在没有第二个参数的情况下调用会失败)

bla.h: In function ‘FloatType rounding::roundalternate(const FloatType&, int&) [with FloatType = char*]’:
bla.h:220:35: error: could not convert ‘rounding::_is_up’ from ‘bool’ to ‘int&’
rounding::roundalternate(argv[0])

Other people也在报告 clang 的问题

相关性:我正在尝试编译 cufflinks使用英特尔编译器,它失败了,因为这段代码就在那里。

我不知道袖扣以前是如何编译的。

更新2:袖扣用 g++ 编译得很好,而不是用 icc,我已经联系了维护者,他们已经删除了新版本中有问题的代码。

最佳答案

这段代码显然很麻烦。 int& 不能绑定(bind)到 bool 类型的左值,也不能绑定(bind)到转换产生的右值。但是,它也可以正确编译。

这是因为,与普通函数不同,模板函数中默认参数的语义分析仅在“在需要默认参数值的上下文中调用函数时”发生,在 8.3.6p5、14.7.1p3、和标准的 14.7.1p13。

这意味着编译错误只会在其他代码调用此函数而没有为第二个参数提供实际参数时发生。

关于c++ - 正在初始化类型为 "int &"的引用(不是 const 限定的),其值是 "bool"类型的一些 hack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20100602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com