我经常想知道为什么C++的名字wchar_t不是简单的wchar,而且我从来没有找到答案.搜索引擎没有帮助,因为他们认为我在询问Windows的WCHAR类型.有任何想法吗?
我读了关于整数常量的Microsoft特定后缀"i64".我想做一个UNSLigned转到ULONGLONG.
ULONGLONG bigNum64 = 0x800000000000000i64 >> myval;
在正常的C中,我会使用后缀"U",例如类似的32位操作
ULONG bigNum32 = 0x80000000U >> myval;
我不希望2的补码符号扩展通过高位传播.我想在64位常数上进行UNSIGNED转换.我认为我的第一个声明是要做一个SIGNED右移.
我试过0x800000000000000i64U,0x800000000000000u64但有编译器错误.
我的图形艺术家给了我一个.PNG文件,然后是.GIF文件.保存时,透明背景像素实际上设置为白色像素.曾经有一段时间我认为VS可以用调色板上的这个小粉红色/三文鱼复古电视图标做透明色,但它不再出现了.
有人有什么想法吗?
我知道我能做到
class Foo;
Run Code Online (Sandbox Code Playgroud)
可能
struct Bar;
Run Code Online (Sandbox Code Playgroud)
和全球职能
bool IsValid(int iVal);
Run Code Online (Sandbox Code Playgroud)
键入的枚举怎么样?在未申报的课程中输入的枚举怎么样?具有未声明的类的函数怎么样?那个未申报的课程中的静态成员怎么样?在未知的命名空间中这些怎么办?我错过了任何可以向前宣布的东西吗?
基本上,我想override在我的C++代码中使用其关键字的C#编译器功能.
class Base
{
virtual int foo(int) const;
};
class Derived : public Base
{
virtual int foo(int); // wanted to override Base, but forgot to declare it const
};
Run Code Online (Sandbox Code Playgroud)
众所周知,上面的代码编译得很好,但会产生一些奇怪的运行时行为.我希望我的C++编译器可以用C#的override关键字来捕获我糟糕的实现.是否有任何像"覆盖"这样的关键字被引入到C++中,或者我们是否坚持#define override virtual用来展示我们的意图?(实际上,我不这样做 - 我讨厌使用预处理器来"扩展"语言).
我正在编写一个程序,其中有一些操作正在浮点数上执行.在我调试程序之后,我开始知道对于特定的测试用例,该值的值variable equals -2.38418579e-07.现在我将cout精度设置为小数点后的2位数.因此,当我打印它时,它打印为-0.00.
但是,我希望输出为0.00而不是-0.00.我已经尝试if了变量值的各种条件.但是,他们没有帮助.任何人都可以建议如何在C++中摆脱-0.00
以下代码不生成#error,而是编译,运行并输出跟踪值37(TT_LAST_PARM等于53,TT_FIRST_PARM等于16):
#if ((TT_LAST_PARM - TT_FIRST_PARM) >= 32)
#error More than 32 parm tokens
#else
HTRACE("%d", TT_LAST_PARM - TT_FIRST_PARM);
#endif
Run Code Online (Sandbox Code Playgroud)
如果我硬编码值,
#if ((53 - 16) >= 32)
#error More than 32 parm tokens
#else
HTRACE("%d", 53 - 16);
#endif
Run Code Online (Sandbox Code Playgroud)
预处理器DOES生成错误:
错误1致命错误C1189:#error:超过32个parm标记d:\ codeMTX\Knowbase\KBMatL\PrintParser.CPP 2663