我相信,直到C++ 14,声明为结构的结构域的某个字段int仍被解释为signed或者unsigned,解释是实现定义的.参考:http://en.cppreference.com/w/cpp/language/bit_field.
在C++ 14中仍然如此吗?即,下面的代码是否保证按照有意义工作?
#include <iostream>
struct X
{
int f:3;
};
int main()
{
X x;
x.f = -2; // is this going to be indeed signed? It seems so.
std::cout << x.f << std::endl; // displays -2
}
Run Code Online (Sandbox Code Playgroud) 是否有一个模板或方法哪一个可以用声明来区分signed int,并int在下面的例子中,像
signed int foo;
int bar;
static_assert(magic_signed<decltype(foo)>::value,"signed"); //PASS
static_assert(magic_signed<decltype(bar)>::value,"not signed"); //ASSERT
Run Code Online (Sandbox Code Playgroud) int,signed int和signedC++的数据类型有区别吗?
并且:如果它们将处理内存中所有相同数量的空间(它们在内存分配的上下文中是等效的),那么它们之间的编译/运行时间是否存在性能差异(这当然不会显着)对于类似以下的程序,但在初始化数百个该类型的变量时)?
如果有任何显着差异或任何编译器警告或错误,我对其中任何一个进行了测试:
与signed int:
#include <iostream>
int main()
{
signed int a = 5;
std::cout << "The number entered is " << a << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
与int:
#include <iostream>
int main()
{
int a = 5;
std::cout << "The number entered is " << a << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
与signed:
#include <iostream>
int main()
{
signed a = 5;
std::cout << "The number entered …Run Code Online (Sandbox Code Playgroud) c++ ×3
signed ×2
bit-fields ×1
c++14 ×1
difference ×1
int ×1
templates ×1
type-traits ×1
types ×1