当有人问decltype(a)
及 和之间的区别时decltype((a))
,通常的回答是 -a
是一个变量,(a)
是一个表达式。我觉得这个答案并不令人满意。
首先,a
也是一个表达式。主要表达式的选项包括 -
更重要的是, decltype 的措辞非常非常明确地考虑了括号:
For an expression e, the type denoted by decltype(e) is defined as follows:
(1.1) if e is an unparenthesized id-expression naming a structured binding, ...
(1.2) otherwise, if e is an unparenthesized id-expression naming a non-type template-parameter, ...
(1.3) otherwise, if e is an unparenthesized id-expression or …
Run Code Online (Sandbox Code Playgroud) (这是一个跟进问题这个。)
检查这个玩具代码:
> x <- data.frame(a = 1:2)
> foo <- function(z) { setDT(z) ; z[, b:=3:4] ; z }
> y <- foo(x)
>
> class(x)
[1] "data.table" "data.frame"
> x
a
1: 1
2: 2
Run Code Online (Sandbox Code Playgroud)
看起来 setDT 确实改变了 x 的类,但是添加的数据不适用于 x。
这里发生了什么?
我们需要抑制调试符号的生成.项目属性/配置属性/ c/c ++/general/debug信息格式下可用的选项等同于/ Z7,/ Zi和/ ZI - 我找不到完全省略/ Zx标志的方法.
与此处的情况不同- 我们正在从IDE构建.
我正在使用visual studio 2010,而手头的项目是一个静态库.
编辑:这是我安装VS2012的视图.这是一些安装问题吗?您的Debug-Information-Format选项有何不同?
我无法理解这些术语之间的差异.
COM和ActiveX是同义词吗?
ActiveX对象只是一个公开IDispatch的COM对象吗?
很多旧的MSDN页面都提到没有任何COM上下文的IDispatch.它是否有单独的历史记录,并且刚刚在其生命周期的后期在COM"保护伞"下引入?
OLE适合哪里?它(可观)是否存在于MFC命名和MSDN中 - 所有这些都只是遗产?
维基百科提供了一些见解,但并不多.我找不到更深入的参考资料.
我们的产品类似游戏,并且非常丰富(~40M - 100M)二进制支持文件 - 纹理,网格,电影等. 像kai1968一样,我希望能够同步这些资产,而不仅仅是代码,只需单击一下.
然而,严格地说,这与版本控制不同:我不想让我们的TFS负担这些文件的无关历史.我可以以某种方式上传内容而不保留历史记录到TFS吗?如果我可以选择在特定点(比如标签点)保留历史记录,而不是每次签到都会更好.
更一般地说,您如何管理二进制资产的同步?
(我知道其他工具,可能更适合这样的任务,但是现在不能从TFS分歧 - 或者完全迁移 - 不是一种选择.)
我对以下行为差异感到困惑:
// suppose myfile.txt contains a single line with the single character 's'
errno_t res;
FILE* fp;
char cmd[81];
res = fopen_s(&fp, "D:\\myfile.txt", "rb" );
fscanf(fp,"%80s",cmd); // cmd now contains 's/0'
fclose(fp);
res = fopen_s(&fp, "D:\\myfile.txt", "rb" );
fscanf_s(fp,"%80s",cmd); // cmd now contains '/0' !
fclose(fp);
Run Code Online (Sandbox Code Playgroud)
结果不依赖于调用顺序(即,首先调用fscanf_s,首先获取空字符串).编译VC++ - VS2005.有人可以复制吗?谁能解释一下?
谢谢!
拿这个玩具程序:
int main()
{
int a = 1;
a = ++a ;
}
Run Code Online (Sandbox Code Playgroud)
在 gcc 9.3(甚至主干)下编译并-Wall -std=c++17
输出:
<source>:4:5: warning: operation on 'a' may be undefined [-Wsequence-point]
4 | a = ++a ;
| ~~^~~~~
Run Code Online (Sandbox Code Playgroud)
我知道在过去这确实是一个问题,但是对同一 SO 问题的不同答案指向 C++17 标准的一部分,该标准已修复以表明在赋值操作中,rhs 在实际任务:
8.18. ... 在所有情况下,赋值顺序在左右操作数的值计算之后,赋值表达式的值计算之前。
那么这个警告确实是假的还是我遗漏了什么?
我们的产品包括一些定制硬件,通过 USB 连接到 PC。我们已经开始研究自动测试,但到目前为止我无法找到可以记录/重放通用 USB 输入的工具。
有谁知道这样的工具吗?
(而且 - 如果它能以某种方式编写脚本那就最好了 - 测试必须在 GUI 交互和自定义硬件操作之间交替)
我在值初始化对象时遇到了 gcc 和 clang 之间意想不到的差异,并怀疑存在一个(或两个)错误。
struct A {
A() {}
int x;
};
struct B : A {
int y;
};
int main() {
...
B b {}; // How should b.x be initialized?
...
}
Run Code Online (Sandbox Code Playgroud)
gcc 使B b2 {}
A 为零初始化,clang 使其默认初始化(不触及 x): https: //godbolt.org/z/8znhr41ro
现在我们要深入探讨标准,以了解谁是对的。值初始化子句说:
9 对 T 类型的对象进行值初始化意味着:
(9.1) 如果 T 是一个(可能是 cv 限定的)类类型 ([class]),那么
(9.1.1) 如果 T 没有默认构造函数 ([class.default.ctor]) 或者用户提供或删除的默认构造函数,则该对象被默认初始化;
(9.1.2) 否则,该对象被零初始化,并且检查默认初始化的语义约束,并且如果 T 具有非平凡的默认构造函数,则该对象被默认初始化;
(9.2) 如果 T 是数组类型,则每个元素都是值初始化的;
(9.3) 否则,该对象被零初始化。
虽然 9.1.2 …