同一函数的两个版本如何不同,它们的不同之处仅在于一个版本是内联的而另一个版本不是内联的?这是我今天编写的一些代码,我不确定它如何工作。
#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) 在我当前的项目中,我试图编写一些可以用这个最小示例表示的东西:
#[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派生的 …