问题标签 [temporary]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vim - 在 (g)Vim 中隐藏(或折叠)文本列(水平)
有没有办法在 Vim 中编辑缓冲区时隐藏缓冲区的列(文本文件,你知道我的意思)吗?例如,在隐藏第 2 列和第 3 列之前缓冲区中可见的文本:
在隐藏它们之后:
(更不用说我正在处理非常大的文件(有时超过 200 GB)。)
是的,我找到了 foldcol.vim,但它需要一个补丁,而且我没有 gcc 来作为服务器上的用户编译它。
提前致谢。
c++ - 编译器无法正确识别 C++ 枚举
谁能解释为什么以下代码无法编译(在 g++ (GCC) 3.2.3 20030502 (Red Hat Linux 3.2.3-49) 上)?
我得到的信息是:
jjj.cpp:在函数'int main()'中:
jjj.cpp:10:'XX :: A'不是'struct X'的静态成员
jjj.cpp:10:没有匹配函数调用'X: :X()'
jjj.cpp:1:候选人是:X::X(const X&)
jjj.cpp:5: X::X(X::State)`
这是错误的代码还是编译器错误?
Neil+Konrad 解决了问题。请参阅下面对尼尔答案的评论。
c++ - 通过引用使用临时对象和参数的规则
说我有一堂课:
和一个功能:
我这样做:
有人可以向我解释有关通过引用传递临时对象的规则吗?就编译器允许的内容而言,您需要 const 的位置,是否发生隐式副本等。从玩耍中,您似乎需要 const 是有道理的,但是关于这一切是否有正式的规则?
谢谢!
c++ - const 对临时的引用
在阅读了 Herb Sutter 博客上的这篇文章后,我做了一些实验,遇到了一些让我困惑的事情。我正在使用 Visual C++ 2005,但如果这取决于实现,我会感到惊讶。
这是我的代码:
运行时,它会显示“ ~Base()
”两次...但是如果我取消注释构造函数,它只会显示一次!
有人对此有解释吗?
c++ - 为什么 Visual C++ 编译器在这里调用错误的重载?
为什么 Visual C++ 编译器在这里调用错误的重载?
我有一个 ostream 的子类,用于定义格式化缓冲区。有时我想创建一个临时的并立即使用通常的 << 运算符将一个字符串插入其中,如下所示:
不幸的是,程序调用 operator<<(ostream, void *) 成员重载,而不是 operator<<(ostream, const char *) 非成员重载。
我编写了下面的示例作为测试,我在其中定义了自己的 M2Stream 类来重现问题。
我认为问题在于 M2Stream() 表达式会产生一个临时的,这会导致编译器更喜欢 void * 重载。但为什么?事实证明,如果我为非成员重载 const M2Stream & 设置第一个参数,我会感到模棱两可。
另一个奇怪的事情是,如果我首先定义一个 const char * 类型的变量然后调用它,而不是文字 char 字符串,它会调用所需的 const char * 重载,如下所示:
就好像文字字符串的类型与 const char * 变量不同!他们不应该是一样的吗?当我使用临时和文字字符字符串时,为什么编译器会调用 void * 重载?
输出:
c++ - 不允许创建临时对象
在多线程应用程序中调试崩溃时,我终于在以下语句中找到了问题:
请注意,它正在创建一个未命名的 CSingleLock 类对象,因此临界区对象在此语句之后立即解锁。这显然不是程序员想要的。这个错误是由一个简单的打字错误引起的。我的问题是,有没有办法阻止在编译时创建类的临时对象,即上述类型的代码应该生成编译器错误。一般来说,我认为每当一个类试图进行某种资源获取时,就不应该允许该类的临时对象。有没有办法强制执行?
c++ - 这个 C++ 临时绑定到引用成员是否应该是非法的?
我的问题(这将在此之后出现,对于冗长的介绍感到抱歉,问题在下面以粗体显示)最初是受到 Herb Sutters Exceptional C++中的第 23 项的启发,我们在其中找到了类似的内容:
<snip>
和
</snip>
现在,我对该代码有以下问题(不,我毫不怀疑 Sutter 先生作为 C++ 专家的能力):
- 像这样的例子是行不通的,因为 GTAClient& worker 是一个非常量引用,不能临时引用,但是好吧,它可能是按标准编写的或者是错字,无论如何,这不是我的意思。
- 让我想知道的是他将如何处理工人参考,即使问题 1. 被忽略。
显然本意是用在通过(多态)接口访问MyWorker
的NVI中;这排除了实现拥有 type 的(值)成员,因为这会导致切片等。值语义不能与多态性很好地混合。 它也不能具有类型的数据成员,因为该类对于. 所以我得出结论,它一定是通过指针或引用来使用的,保留了原始对象和多态性。GenericTableAlgorithm
GTAClient
GTAClient
MyWorker
GenericTableAlgorithm
- 由于指向临时对象
MyWorker()
(pimpl_
. (注意:GTAClient 中也没有 clone-member 函数,它可以完成这项工作;我们不要假设有一个基于 RTTI-typeinfo 的工厂潜伏在后台。)
在这里(终于!)我的问题是: (如何)可以合法地将临时 to 传递给具有延长生命周期的类的引用成员?
§12.2.5 中的标准(C++0x 版本,但在 C++ 中相同,不知道章号)从生命周期扩展中产生以下异常:
“-A 临时绑定到构造函数中的引用成员ctor-initializer (12.6.2) 一直存在,直到构造函数退出。”
因此该对象不能用于调用客户端代码a.Process(); 因为引用的临时 fromMyWorker()
已经死了!
现在考虑一个我自己制作的示例来演示该问题(在 GCC4.2 上测试):
产生输出
您可以看到,在const oogie& ref的情况下,func() 的立即绑定到引用的临时返回值具有所述引用的延长生命周期(直到 main 结束),所以没关系。
但是: 1000-oogie 对象在 kangoo-s 被构建后就已经被销毁了。代码有效,但我们在这里处理的是一个不死物体......
所以再次提出这个问题:
首先,我在这里遗漏了什么并且代码是正确/合法的吗?.
其次,为什么 GCC 没有给我任何警告,即使指定了 -Wall ?应该是?可以吗?
谢谢你的时间,
马丁
c++ - stringstream临时ostream返回问题
我正在创建一个包含以下部分的记录器:
带着这样的想法:
这一切都按预期工作,但是当我这样做时:
这没用:
导致“格式”包含垃圾数据而不是通常的正确字符串。
我认为这是因为 << 运算符返回的临时 ostream 超过了它来自的字符串流。
还是我错了?
(为什么 string() 以这种方式工作?是因为它返回对自身的引用吗?我假设是的。)
我真的很想这样做,因为我会在登录发布模式时消除额外的分配。
任何以这种方式完成它的指针或技巧都将受到欢迎。在我的实际解决方案中,我有许多不同的日志功能,它们都比这更复杂。所以我希望在调用代码中以某种方式实现它。(如果可能,不要修改我的#define)
只是给出一个想法,我的一个实际#defines的一个例子:
它匹配采用 char*、string() 和 ostream() 的 varargs printf-like log 函数以及采用 string()、exception() 和 HRESULT 的非 vararg 函数。
c++ - 为什么非常量引用不能绑定到临时对象?
为什么不允许获取对临时对象的非常量引用,哪个函数getx()
返回?显然,这是 C++ 标准禁止的,但我对这种限制的目的感兴趣,而不是对标准的引用。
- 很明显,对象的生命周期不能成为原因,因为C++ 标准不禁止对对象的常量引用。
- 很明显,上述示例中的临时对象不是常量,因为允许调用非常量函数。例如,
ref()
可以修改临时对象。 - 此外,
ref()
允许您欺骗编译器并获得指向此临时对象的链接,从而解决了我们的问题。
此外:
他们说“将一个临时对象分配给 const 引用会延长该对象的生命周期”和“尽管对非 const 引用什么也没说”。我的附加问题。以下分配是否会延长临时对象的生命周期?
c++ - 是否可以更改临时对象并将其作为参数传递?
是否可以更改临时对象并将其作为参数传递?
众所周知,将临时对象分配给 const 引用会延长该临时对象的生命周期。那么我的代码的#4 和#5 行呢?引用 x 在函数 func_ref 中是否始终有效?问题是 operator-- 返回一些引用,编译器看不到这个引用和我们创建的临时值之间的任何关系。