【发布时间】:2018-02-18 10:25:19
【问题描述】:
我在我的程序中引入了新的类型,例如tileno_i、pageno_i 和blockno_u,而我以前只有int 或unsigned,这个想法是为了更清楚地传达什么样的函数接受或返回的值。
我曾希望使用 g++ 的 -Wconversion 标志来发现一些局部变量也应该转换为新类型的地方,但我最终会遇到很多需要无用强制转换的情况,例如
for (tileno_i i = 0 ; i < size(); i += 4) {
// ^
// warning: conversion to tileno_i {aka short unsigned int} from 'int' may alter its value
是否有一个类似于Wconversion 的标志,它可以让我捕捉错误,而无需假设我对它们进行算术运算后立即将它们自动提升为ints?
【问题讨论】:
-
无论您是否假设,促销都会发生,作为算术转换的一部分。
-
同意,但它使得在来自外部标头的大量警告中无法跟踪这些新类型。我还想避免在所有地方都使用额外的演员来破坏可读性。另外,如果我总是以
var = (tileno_t) arg + 1结尾,那不会首先检查 arg 是否是 tileno_t。 -
这可能说明了这些新类型的设计。
-
请注意,POSIX 保留所有以
_t结尾的类型名称以用于实现,因此不建议这样命名您自己的类型。 -
看看 Boost 的 Stong typedef 参见:stackoverflow.com/questions/9211210/…
标签: c++ type-conversion warnings