以下代码将根据 cppquiz.org 进行编译并具有确定性(问题 #30)
#include <iostream>
struct X {
X() { std::cout << "X"; }
};
int main() { X x(); }
Run Code Online (Sandbox Code Playgroud)
程序的输出什么都不是,因为
X x();
Run Code Online (Sandbox Code Playgroud)
是一个函数声明。
但是我仍然想知道为什么这个会编译,尽管这个声明从未在任何地方定义过?
标准提到f(a,(t = 3,t + 2),c); 根据我的理解,这将是赋值表达式,后跟第二个运算符的表达式.
但语法列出并列:
表达:
赋值表达式
表达式,赋值表达式
有人这么好,向我解释一下,我在这里错过了什么?
void (*pf)(int i){
};
Run Code Online (Sandbox Code Playgroud)
根据C++ 11,我不需要尾随';',但Dev-C++不仅会抛出一个警告 - 而是一个错误并打破编译.
但如果我宣布
void pf(int i){
}
Run Code Online (Sandbox Code Playgroud)
不再发出任何警告了吗?
在Dev-C++中编译我的程序时
LPCTSTR ClsName = L"BasicApp";
LPCTSTR WndName = L"A Simple Window";
Run Code Online (Sandbox Code Playgroud)
编译中断,但是当我编译我的程序时
LPCTSTR ClsName = "BasicApp";
LPCTSTR WndName = "A Simple Window";
Run Code Online (Sandbox Code Playgroud)
它成功了; 因此,问题是如何以VS ++的'L'方式将unicode-strings传递给Orwell Dev-C++.
我确实理解如何重载运算符,但显然不完全.
有人可以解释一下该部件的用法
WWindow::operator HWND()
{
// This overloaded operator allows us to use HWND anyway we want
return _hwnd;
}
Run Code Online (Sandbox Code Playgroud)
为了我?
我不明白怎么做
operator HWND(){ ... }
Run Code Online (Sandbox Code Playgroud)
应该工作吗?
Vector::Vector(const Vector& a) : elem{new double[sz]}, sz{a.sz}
{
for(int i = 0; i!= sz; ++i)
elem[i] = a.elem[i];
}
Run Code Online (Sandbox Code Playgroud)
这里有趣的部分是elem {new double [sz]}之前
sz{a.sz}
Run Code Online (Sandbox Code Playgroud)
所以就是这样
sz
Run Code Online (Sandbox Code Playgroud)
已初始化.
但它不会抛出任何错误,对吧?
有人可以告诉我一些关于标准中相应部分的内容,对内部工作的更深入的了解,或者其他方式如何受到监管?
.data
source DWORD 20 DUP(0FFFFFFFFh)
target DWORD 20 DUP(?)
.code
...
Run Code Online (Sandbox Code Playgroud)
上面的代码取自 Kip Irvine 最新的第 7 版第 355 页。显然,20x36 位存储到 32?
c++ ×7
c++11 ×4
pointers ×2
assembly ×1
c ×1
c++14 ×1
declaration ×1
definition ×1
dev-c++ ×1
function ×1
masm ×1
msdn ×1
overloading ×1
sequencing ×1
unicode ×1
x86 ×1