V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  amiwrong123  ›  全部回复第 38 页 / 共 38 页
回复总数  750
1 ... 29  30  31  32  33  34  35  36  37  38  
@zjsxwc
你们都说,内存会被释放掉。那么我打印 global 的值的时候,肯定就是非法值呗。
class sale {
public:
int i = 1;
};

sale add(const sale& lift, const sale& right) {
sale sum = lift;
sum.i += right.i;
return sum;
}

int main()
{
sale one;
sale two;
const sale& global = add(one, two);
cout << global.i;
}
执行这个代码,我发现还是能打印出来 2 啊,也不是什么非法值。
@ipwx
是啊,你说的差不多。主要把,我是想看看 return 到底是怎么 return 的,有几次内存拷贝,这样。
还有最后你说的这个深度优化,意思懂啦,相当于直接 A target;
@aliwalker
既然你用 clang 编译没有出现两次写内存,那可能我的编译器的问题吧。
然后你的第二段,我看了,它把返回值 int 存在了-12,-11,-10,-9 这四个字节里,然后把地址存在了-8,-7,...,-1,没有什么重合啊感觉。所以没理解,“为什么不是 const 引用不行”。
@thedrwu
好吧,首先是不是,引用绑定到返回的中间变量,这种写法就是错的吗

然后,我又改了一下,改成 sale global = add(one, two);汇编就变成了:
00B019D2 8D 45 E8 lea eax,[two]
00B019D5 50 push eax
00B019D6 8D 4D F4 lea ecx,[one]
00B019D9 51 push ecx
00B019DA E8 F0 F9 FF FF call add (0B013CFh)
00B019DF 83 C4 08 add esp,8
00B019E2 89 85 10 FF FF FF mov dword ptr [ebp-0F0h],eax
00B019E8 8B 95 10 FF FF FF mov edx,dword ptr [ebp-0F0h]
00B019EE 89 55 DC mov dword ptr [global],edx
好像跟是不是对象没关系,只用一个地址就好了。
哎,我是不是有点钻牛角尖了,但是又有点好奇。

@akira
你看上面的汇编,好像跟是不是对象没关系啊。

@hoyixi
哈哈哈,一时手滑啦
@lhx2008
用得是 vs2017,找了找,在当前项目的什么设置里面,找到了“优化”,里面有什么内联函数拓展、启动内部函数什么的,但基本都是关着的。

@ipwx
const int& b = re();原来这种用法是不合法的吗?有点没懂啊,我知道如果返回局部变量的引用,这种情况是不合法的,虽然编译器只是报个 warning。


@stephen9357
原来是这样的啊。确实大概能看明白,比如函数体返回值那里有没有&(返回的是不是引用),会体现到汇编上去。虽然分配了两次空间,但可能就是编译器没优化好呗。
@caocong
```javascript
document.getElementById("source").onfocus = function(){
navigator.clipboard.readText().then(
clipText => {document.getElementById("source").value = clipText;})
setTimeout(()=> {
var a = document.getElementsByClassName('tlid-translation')[0];
var result = ''
//console.log(a.children.length);
for (var i = 0; i < a.children.length; i++){
//console.log(a.children[i].tagName);
if(a.children[i].tagName == 'SPAN' )
{//console.log(a.children[i].innerText);
result += a.children[i].innerText;
}else{
result += '\n';
}
}
navigator.clipboard.writeText(result)},2000);


};
```
原来大括号可以把语句框起来,这样就可以了。这样就解决了左边框有换行的情况。再次感谢啦。
@caocong
刚才我还在想怎么解决,对话,延时就好了。谢谢大佬。
但如果左边框有换行符,有边框 tlid-translation 里面的 children 不止一个,类似于:
<span title="" class="">遷移 Transition to the Audio </span>
<br>
<span title="" class="">遷移 Transition to the Audio </span>
这个好像不好弄,看语法好像没法写循环啊
@caocong
我在看一下,能不能把粘贴板的内容,替换为谷歌翻译的右边框的内容(翻译后的内容)。
@caocong
谢谢,好使了。但好使粘贴板里的内容如果是日文,好像有编码问题。我再百度百度吧。代码就是
```javascript
document.getElementById("source").onfocus = function(){
navigator.clipboard.readText().then(
clipText => {document.getElementById("source").value = clipText;})
}
```
还是说,我得在火狐的配置文件里面改什么吗? about:config 里面的 clipboard.autocopy 已经被我改成 true 了,但还是不好使。
1 ... 29  30  31  32  33  34  35  36  37  38  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   881 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 16ms · UTC 23:20 · PVG 07:20 · LAX 16:20 · JFK 19:20
Developed with CodeLauncher
♥ Do have faith in what you're doing.