测试几个编译器(Comeau,g ++)确认某些"整数类型"的按位运算符的结果是int:
void foo( unsigned char );
void foo( unsigned short );
unsigned char a, b;
foo (a | b);
Run Code Online (Sandbox Code Playgroud)
我希望"a | b"的类型是unsigned char,因为两个操作数都是unsigned char,但是编译器说结果是int,而对foo()的调用是不明确的.为什么设计语言以使结果为int,或者此实现是否依赖?
谢谢,
如果你有一个多线程程序(Linux 2.26内核),并且一个线程做了导致段错误的东西,其他线程是否仍会安排运行?其他线程是如何终止的?有人可以解释多线程程序的进程关闭程序吗?
如果对未命名的命名空间和本地命名空间中存在的名称的引用是否会导致歧义错误或分辨率是否明确定义?我在G ++和Clang上看到以下工作正常,在MSVC上则不太好.
namespace Foo
{
class Bar
{
public:
int x;
};
}
namespace
{
class Bar
{
public:
int y;
};
}
namespace Foo
{
void tester()
{
Bar b;
}
}
int main()
{
Foo::tester();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想看看静态库中的哪些函数(如果链接到dll中)将被导出。我该怎么做呢?
int foo(int i)
{ return i + 1; }
__declspec(dllexport) int bar(int i)
{ return i + 1; }
Run Code Online (Sandbox Code Playgroud)
dumpbin /symbols mylib.lib 这两个函数产生相同的信息。
00A 00000000 SECT4 notype () External | ?foo@@YAHH@Z (int__cdecl foo(int))
00B 00000020 SECT4 notype () External | ?bar@@YAHH@Z (int __cdecl bar(int))
Run Code Online (Sandbox Code Playgroud)
我怎么知道bar()将被导出但foo()不会被导出?