我有以下代码:
#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
显然我错过了一些关于新语法的规则,但是我不确定它是什么。