从int到float是否比static_cast更优雅<;浮动>;? 我是一个.NET开发者,试图做C++(AHEM),我在这里遇到了编译器警告: const auto u = (textel.character % font_glyph_column_count) * font_glyph_size; // <- all int const auto v = (textel.character / font_glyph_column_count) * font_glyph_size; // <- all int const auto top_left_uv = sf::Vector2f(u, v); const auto u=(textel.character%font\u glyph\u column\u count)*font\u glyph\u size;//

从int到float是否比static_cast更优雅<;浮动>;? 我是一个.NET开发者,试图做C++(AHEM),我在这里遇到了编译器警告: const auto u = (textel.character % font_glyph_column_count) * font_glyph_size; // <- all int const auto v = (textel.character / font_glyph_column_count) * font_glyph_size; // <- all int const auto top_left_uv = sf::Vector2f(u, v); const auto u=(textel.character%font\u glyph\u column\u count)*font\u glyph\u size;//,c++,casting,C++,Casting,您可以使用c stryle cast INTA=1; 浮动b=(浮动)a 你也可以这样做 INTA=1; 浮动b=a 您可以使用c stryle cast INTA=1; 浮动b=(浮动)a 你也可以这样做 INTA=1; 浮动b=a 根据您对“优雅”的定义,您可能喜欢使用-where-where-you-do,例如,float f=float(i)。为什么不手动指定u和v的类型呢?如果您实际上没有使用任何分数数学(如果font\u glyph\u size是整数),则不必将强制转换放置在*中。

您可以使用c stryle cast

INTA=1; 浮动b=(浮动)a

你也可以这样做

INTA=1;
浮动b=a

您可以使用c stryle cast

INTA=1; 浮动b=(浮动)a

你也可以这样做

INTA=1;
浮动b=a

根据您对“优雅”的定义,您可能喜欢使用-where-where-you-do,例如,
float f=float(i)
。为什么不手动指定
u
v
的类型呢?如果您实际上没有使用任何分数数学(如果
font\u glyph\u size
是整数),则不必将强制转换放置在
*
中。而且,
const auto var=constructor(args)
是不必要的冗长:类类型的变量声明是构造函数调用。写入
const sf::Vector2f top\u left\u uv(u,v)
(或者,我更喜欢的是,
sf::Vector2f const top_left_uv(u,v);
)。@AdrianMole我发现功能性风格更优雅。但是很多人说这就像c型演员,最好不要使用它。。。所以,我想知道还有什么是可能的。@HTNW你是对的,在这个计算中一切都是int,但是当我做const float u=…,警告消失了,但是clang tidy仍然抱怨转换的范围缩小了。CCTR:谢谢,我仍然需要习惯C++的更紧凑的初始化,它确实更干净。你正在尝试把一个值从一个类型转换成另一个类型。这本质上是一个危险的操作,当您必须这样做时,使用像
static\u cast
这样的详细语法是一种优雅的方式。根据您定义“优雅”的方式,您可能会喜欢使用-where-you-can-do,比如说,
float f=float(i)
。为什么不手动指定
u
v
的类型?如果您实际上没有使用任何分数数学(如果
font\u glyph\u size
是整数),则不必将强制转换放置在
*
中。而且,
const auto var=constructor(args)
是不必要的冗长:类类型的变量声明是构造函数调用。写入
const sf::Vector2f top\u left\u uv(u,v)
(或者,我更喜欢的是,
sf::Vector2f const top_left_uv(u,v);
)。@AdrianMole我发现功能性风格更优雅。但是很多人说这就像c型演员,最好不要使用它。。。所以,我想知道还有什么是可能的。@HTNW你是对的,在这个计算中一切都是int,但是当我做const float u=…,警告消失了,但是clang tidy仍然抱怨转换的范围缩小了。CCTR:谢谢,我仍然需要习惯C++的更紧凑的初始化,它确实更干净。你正在尝试把一个值从一个类型转换成另一个类型。这本质上是一个危险的操作,使用像
static\u cast
这样的冗长语法是一种优雅的方法,在你绝对必须这样做的时候。我的问题是如何找到一个现代的解决方案。c风格的演员阵容到处都不受欢迎。您的第二个建议给出了与我的代码相同的缩小转换警告,这正是我试图解决的问题。我的问题是找到一个现代的解决方案。c风格的演员阵容到处都不受欢迎。您的第二个建议给出了与我的代码相同的缩小转换警告,这正是我试图解决的问题。
const auto u = static_cast<float>(textel.character % font_glyph_column_count) * font_glyph_size;
const auto v = static_cast<float>(textel.character / font_glyph_column_count) * font_glyph_size;
const auto top_left_uv = sf::Vector2f(u, v);