小编Tho*_*hor的帖子

在下面的代码的上下文中,为什么"cout << c"合法而"c ="x""非法?

我是C++的新手,正在尝试学习关键字'auto'和reference的概念.我在网上看到了这个问题和答案.

合法的以下范围是?如果是这样,c的类型是什么?

const string s = "Keep out!";
for (auto &c : s){ /*... */ }
Run Code Online (Sandbox Code Playgroud)

答案是:

取决于for循环体内的代码.例如:

cout << c;  // legal.
c = 'X';    // illegal.
Run Code Online (Sandbox Code Playgroud)

没有提供任何解释.有人可以解释为什么会这样吗?

c++ reference auto

3
推荐指数
1
解决办法
72
查看次数

"var items = [Int]()"中括号的用途是什么?

我是Swift的新手,正在尝试学习它的语法.我在网上看到了这段代码.

var items = [Int]()
Run Code Online (Sandbox Code Playgroud)

我知道

  • var =声明变量
  • items =变量的名称是'items'
  • [Int] = Int的数组

但是,我不确定[Int]之后的()的目的.我知道代码不会在没有()的情况下编译,但它的目的是什么?

syntax parentheses swift

3
推荐指数
1
解决办法
413
查看次数

为什么要宣布"得分[11] = {};" 和"等级"为"无符号"而不是"int"

我是C++的新手,正在尝试学习数组的概念.我在网上看到了这段代码.对于下面的示例代码,声明是否有任何区别:

unsigned scores[11] = {};
unsigned grade; 
Run Code Online (Sandbox Code Playgroud)

如:

int scores[11] = {};
int grade; 
Run Code Online (Sandbox Code Playgroud)

我想必须有一个原因score[11] = {};并且grade被宣布为unsigned,但它背后的原因是什么?

int main() {
    unsigned scores[11] = {};
    unsigned grade;
    while (cin >> grade) {
        if (0 <= grade <= 100) {
            ++scores[grade / 10];
        }
    }
    for (int i = 0; i < 11; i++) {
        cout << scores[i] << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays unsigned c++11

3
推荐指数
1
解决办法
252
查看次数

如何在MVC中测试控制器类?

我正在根据模型 - 视图 - 控制器模式在Swift中构建一个简单的iOS应用程序.我可以通过给出输入数据并根据我的期望断言输出结果来测试Model类.但我想知道如何测试Controller类?

似乎如果我想测试Controller类,测试逻辑会复杂得多.有没有标准的方法来测试Controller类?

model-view-controller unit-testing controller ios swift

3
推荐指数
1
解决办法
609
查看次数

intVal3 TBYTE 1234 - 汇编程序没有注意到TBYTE变量声明无效

我目前正在学习汇编编程,遵循Kip Irvine的"汇编语言x86编程"一书.

在书中,作者说

MASM使用TBYTE指令声明打包的BCD变量.常量初始值设定项必须为十六进制,因为汇编程序不会自动将十进制初始值设定项转换为BCD.以下两个示例演示了表示十进制-1234的有效和无效方式:

intVal TBYTE 80000000000000001234h ; valid
intVal TBYTE -1234 ; invalid 
Run Code Online (Sandbox Code Playgroud)

第二个示例无效的原因是MASM将常量编码为二进制整数而不是压缩BCD整数.

据我所知,MASM汇编程序无法将十进制整数转换为BCD.但我已经提出了以下编译intVal3 TBYTE 1234得很好的代码(通知假设是无效的,但它编译就像有效的代码一样)

.386
.MODEL FLAT, STDCALL
.STACK 4096
ExitProcess PROTO, dwExitCode: DWORD

.DATA
intVal1 TBYTE 800000000000001234h
intVal2 TBYTE -1234h
intVal3 TBYTE -1234      ; compiled despite being invalid

.CODE 
    main PROC 


invoke ExitProcess, 0
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)

为什么汇编程序没有注意到无效代码?这是汇编程序无法检测到的错误,需要程序员保持警惕吗?

=============== 编辑1 =================

我按照@PaulH的建议检查了列表文件,这是一个截图

在此输入图像描述

从列表文件的结果和@PaulH所说的结果来看,我得出了以下结论(尽管不确定完全正确):

TBYTE类型的变量将解释简单存储参数的二进制值(无论是80000000000000001234h,-1234h还是-1234)到变量中.因为TBYTE类型的变量被认为是用作BCD整数,所以完全由程序员来确保TBYTE类型的变量被正确使用.

x86 assembly masm

3
推荐指数
1
解决办法
175
查看次数

如何找出SQL Server执行计划中使用的中间值所代表的内容

我正在学习如何阅读SQL Server中的实际执行计划.我注意到,SQL服务器趋向于表示在物理查询计划,作为例如用于中间值expr1006,expr1007等(即expr,随后的数).

这是一个截图.请注意底部附近expr1006, expr1008, expr1009的部分中列出的表达式output list.

在此输入图像描述

有可能找出它们真正代表的东西吗?

sql t-sql sql-server sql-execution-plan

3
推荐指数
1
解决办法
191
查看次数

python 运算符重载 __radd__ 和 __add__

我目前正在学习 python 运算符重载(__radd__准确地说__add__),我有以下代码

class Commuter1:
    def __init__(self, val):
        self.val = val
    def __add__(self, other):
        print('add', self.val, other)
        return self.val + other


    def __radd__(self, other):
        print('radd', self.val, other)
        return other + self.val


x = Commuter1(88)
y = Commuter1(99)

print(x + y)
Run Code Online (Sandbox Code Playgroud)

我得到了以下结果

在此输入图像描述

当单独使用时,我了解如何__radd__工作__add__。但对于 line x + y,我不确定为什么会调用__radd____add__方法。

python operator-overloading

3
推荐指数
1
解决办法
8121
查看次数

我认为"NlogN"是"N"次"logN",但为什么它被描述为"双倍加上与N成比例"

我目前正在学习大O符号.在材料中,O(NlogN)被描述为Doubled plus an amount proportional to N.但我认为这将是O(N + logN)和不是O(NlogN)(我认为O(NlogN)Double times logN).

我的理解是否存在逻辑上的错误?

在此输入图像描述

algorithm collections

3
推荐指数
1
解决办法
374
查看次数

将非常大的int转换为double,在某些计算机上丢失精度

我目前正在学习cpp中的类型间数据转换.我被教过

对于一个非常大的int,我们可以(对于某些计算机)在转换为double时损失精度.

但没有提供该声明的理由.

有人可以提供解释和示例吗?谢谢

c++ double types integer casting

3
推荐指数
2
解决办法
312
查看次数

更改[] .__ proto __。constructor和[] .constructor的行为不同

我目前正在尝试了解constructorjavascript中的属性。

请注意,我知道应该避免更改内建属性,因为我想更好地理解基本原理,所以我一直在玩它。

我试图更改的默认constructor属性[](即数组对象的默认构造函数)

[].__proto__.constructor === [].constructor; // true 

[].constructor = function A(){}; // attempts to reset the constructor property to a new function 

[].constructor; // prints ƒ Array() { [native code] }, which indicate the attempt failed
Run Code Online (Sandbox Code Playgroud)

但是当我检查的属性描述符 [].constructor

Object.getOwnPropertyDescriptor([].__proto__, 'constructor');
Run Code Online (Sandbox Code Playgroud)

哪个打印

{value: ƒ, writable: true, enumerable: false, configurable: true}
Run Code Online (Sandbox Code Playgroud)

那么[].__proto__.constructor财产是writable

所以我尝试通过设置constructor属性[].__proto__,成功

[].__proto__.constructor = function B(){};

[].__proto__.constructor; //   prints: ƒ B(){}, which indicate the attempt succeded …
Run Code Online (Sandbox Code Playgroud)

javascript arrays constructor prototype

3
推荐指数
1
解决办法
31
查看次数