导致此分段故障的原因是什么?通过参考,移动返回

时间:2017-12-27 04:28:02

标签: c++ segmentation-fault c++14 pass-by-reference move-semantics

我有以下代码:

#ifndef VECTOR_H
#define VECTOR_H

#include <SFML/Graphics.hpp>
#include <cmath>

template<typename T>
inline constexpr T &&dot(const sf::Vector2<T> &v1, const sf::Vector2<T> &v2)
{
    return v1.x * v2.x + v1.y * v2.y;
}

template<typename T>
inline constexpr T &&abs(const sf::Vector2<T> &v)
{
    return sqrt(dot(v, v));
}

template<typename T>
inline constexpr sf::Vector2<T> &&norm(const sf::Vector2<T> &v)
{
    return v/abs(v);
}


#endif // VECTOR_H

调用norm(sf::Vector2<float>{1, 0})会在行return sqrt(dot(v, v));上产生一个分段错误。我不确定是什么导致了这个问题,但是我已经验证了它与函数中值的传递/返回有关

如下所示运行时出错:

#ifndef VECTOR_H
#define VECTOR_H

#include <SFML/Graphics.hpp>
#include <cmath>

template<typename T>
inline constexpr T dot(const sf::Vector2<T> v1, const sf::Vector2<T> v2)
{
    return v1.x * v2.x + v1.y * v2.y;
}

template<typename T>
inline constexpr T abs(const sf::Vector2<T> v)
{
    return sqrt(dot(v, v));
}

template<typename T>
inline constexpr sf::Vector2<T> norm(const sf::Vector2<T> v)
{
    return v/abs(v);
}


#endif // VECTOR_H

显然我错过了一些关于新语法的规则,但是我不确定它是什么。

0 个答案:

没有答案