小编zbr*_*120的帖子

函数的内联版本与非内联版本返回的值不同

同一函数的两个版本如何不同,它们的不同之处仅在于一个版本是内联的而另一个版本不是内联的?这是我今天编写的一些代码,我不确定它如何工作。

#include <cmath>
#include <iostream>

bool is_cube(double r)
{
    return floor(cbrt(r)) == cbrt(r);
}

bool inline is_cube_inline(double r)
{
    return floor(cbrt(r)) == cbrt(r);
}

int main()
{
    std::cout << (floor(cbrt(27.0)) == cbrt(27.0)) << std::endl;
    std::cout << (is_cube(27.0)) << std::endl;
    std::cout << (is_cube_inline(27.0)) << std::endl;
}

Run Code Online (Sandbox Code Playgroud)

我希望所有输出都等于1,但是实际上它输出的是(g ++ 8.3.1,没有标志):

1
0
1
Run Code Online (Sandbox Code Playgroud)

代替

1
1
1
Run Code Online (Sandbox Code Playgroud)

编辑:clang ++ 7.0.0输出此:

0
0
0
Run Code Online (Sandbox Code Playgroud)

和g ++ -Ofast this:

1
1
1
Run Code Online (Sandbox Code Playgroud)

c++

84
推荐指数
2
解决办法
3456
查看次数

使用 PhantomData&lt;T&gt; 时,不满足特征绑定 `T: std::default::Default`

在我当前的项目中,我试图编写一些可以用这个最小示例表示的东西:

#[derive(Default)]
struct A<T> {
    field: std::marker::PhantomData<T>
}

struct B;

fn main() {
    let a = A::<B> {
        ..Default::default()
    };
}
Run Code Online (Sandbox Code Playgroud)

但是,这段代码无法编译。

error[E0277]: the trait bound `B: std::default::Default` is not satisfied
  --> src/main.rs:10:11
   |
10 |         ..Default::default()
   |           ^^^^^^^^^^^^^^^^ the trait `std::default::Default` is not implemented for `B`
   |
   = note: required because of the requirements on the impl of `std::default::Default` for `A<B>`
   = note: required by `std::default::Default::default`

error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)

这对我来说有点奇怪,因为它Default是 forA和 for派生的 …

rust

5
推荐指数
1
解决办法
7061
查看次数

标签 统计

c++ ×1

rust ×1