我有以下代码:
typedef enum
{
FOO,
BAR,
BAZ
} foo_t;
static void afunc(bool is_it_on)
{
/* do the job */
}
int main(void)
{
afunc(BAZ);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
即使-Wall -Wextra为编译器提供了选项,编译此代码也不会生成任何警告消息.我甚至试图与-Wconversion选项,它没有采取任何影响,因为bool和enum似乎是G ++相同的尺寸.(enum据我所知,类型的大小没有在规格中定义)
我已经梳理了gcc手册并且没有发现它.
问题:
我正在使用的编译器:gcc 4.1.2
Editted
结论:
对此唯一可行的解决方案似乎是定义一个表示0或1的新类型,并使用它代替bool.
代码如下,g ++抱怨类型转换:
typedef enum
{
FOO1,
FOO2
} foo_t;
typedef enum
{
MY_FALSE,
MY_TRUE
} my_bool_t;
void foo(my_bool_t a)
{
}
int main(void)
{
/*
* gcc generates …Run Code Online (Sandbox Code Playgroud) 我认为以下代码应该生成错误:
#include <iostream>
#include <string>
static void pr(const std::string &aStr)
{
std::cout << aStr << "\n";
}
int main(void)
{
const char *a = "Hellu";
pr(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是gcc 4.1.2成功地编译了它.
是std :: string的构造函数阻塞了,创建了std :: string的实例吗?
我认为它不应该,因为引用只是变量的别名(在这种情况下,没有引用引用的std :: string类型的变量).
是否有人解释为什么代码编译成功?
提前致谢.