2012年(158)
分类: C/C++
2012-11-20 11:26:05
// a.hpp
struct foo
{
foo();
#ifdef SOMETHING
int a;
#endif
int
b;
};
// a.cpp
#define SOMETHING
#include
"a.hpp"
#undef SOMETHING
foo::foo()
{
a = 1;
b =
2;
}
// main.cpp
#include "a.hpp"
#include
int main()
{
foo test;
//
理论上讲,a.cpp和main.cpp中的foo定义不同,是不同的类型,所以应当报foo()未实现,但实际上却正确
std::cout << test.b << std::endl; //
输出1
}
------------------------------------------------------------------------------------
在VC2005中:
#include
#include
#include
int main( void )
{
std::locale prev_loc =
std::locale::global( std::locale("chs") ); // 没有这一句的话,文件打开失败
std::ifstream file( "d:\\测试" );
std::locale::global( prev_loc ); // 没有这一句的话,文件中的中文无法输出,且wcout输出中文也失败
for( std::string line; getline(file,line); )
{
std::cout << line << std::endl;
}
std::wcout.imbue( std::locale("chs") );
std::wcout
<< L"结束" <<
std::endl;
}
------------------------------------------------------------------------------------
template
struct a
{
void foo( void ) {}
};
template
struct b : a
{
void bar(
void ) { foo(); } // g++3.4.2不能编译通过,必须写成 a
};
------------------------------------------------------------------------------------
template
struct foo
{
template
void bar( void
)
{
}
};
template
void test( void )
{
foo
foo
}