问题标签 [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.

0 投票
3 回答
2865 浏览

vim - 在 (g)Vim 中隐藏(或折叠)文本列(水平)

有没有办法在 Vim 中编辑缓冲区时隐藏缓冲区的列(文本文件,你知道我的意思)吗?例如,在隐藏第 2 列和第 3 列之前缓冲区中可见的文本:

在隐藏它们之后:

(更不用说我正在处理非常大的文件(有时超过 200 GB)。)

是的,我找到了 foldcol.vim,但它需要一个补丁,而且我没有 gcc 来作为服务器上的用户编译它。

提前致谢。

0 投票
6 回答
2172 浏览

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 解决了问题。请参阅下面对尼尔答案的评论。

0 投票
3 回答
393 浏览

c++ - 通过引用使用临时对象和参数的规则

说我有一堂课:

和一个功能:

我这样做:

有人可以向我解释有关通过引用传递临时对象的规则吗?就编译器允许的内容而言,您需要 const 的位置,是否发生隐式副本等。从玩耍中,您似乎需要 const 是有道理的,但是关于这一切是否有正式的规则?

谢谢!

0 投票
1 回答
6209 浏览

c++ - const 对临时的引用

在阅读了 Herb Sutter 博客上的这篇文章后,我做了一些实验,遇到了一些让我困惑的事情。我正在使用 Visual C++ 2005,但如果这取决于实现,我会感到惊讶。

这是我的代码:

运行时,它会显示“ ~Base()两次...但是如果我取消注释构造函数,它只会显示一次

有人对此有解释吗?

0 投票
5 回答
1717 浏览

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 * 重载?

输出:

0 投票
8 回答
3101 浏览

c++ - 不允许创建临时对象

在多线程应用程序中调试崩溃时,我终于在以下语句中找到了问题:

请注意,它正在创建一个未命名的 CSingleLock 类对象,因此临界区对象在此语句之后立即解锁。这显然不是程序员想要的。这个错误是由一个简单的打字错误引起的。我的问题是,有没有办法阻止在编译时创建类的临时对象,即上述类型的代码应该生成编译器错误。一般来说,我认为每当一个类试图进行某种资源获取时,就不应该允许该类的临时对象。有没有办法强制执行?

0 投票
4 回答
2293 浏览

c++ - 这个 C++ 临时绑定到引用成员是否应该是非法的?

我的问题(这将在此之后出现,对于冗长的介绍感到抱歉,问题在下面以粗体显示)最初是受到 Herb Sutters Exceptional C++中的第 23 项的启发,我们在其中找到了类似的内容:
<snip>

</snip>

现在,我对该代码有以下问题(不,我毫不怀疑 Sutter 先生作为 C++ 专家的能力):

    1. 像这样的例子是行不通的,因为 GTAClient& worker 是一个非常量引用,不能临时引用,但是好吧,它可能是按标准编写的或者是错字,无论如何,这不是我的意思。
    2. 让我想知道的是他将如何处理工人参考,即使问题 1. 被忽略。
      显然本意是用在通过(多态)接口访问MyWorker的NVI中;这排除了实现拥有 type 的(值)成员,因为这会导致切片等。值语义不能与多态性很好地混合。 它也不能具有类型的数据成员,因为该类对于. 所以我得出结论,它一定是通过指针或引用来使用的,保留了原始对象和多态性。GenericTableAlgorithmGTAClientGTAClient
      MyWorkerGenericTableAlgorithm
    3. 由于指向临时对象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 ?应该是?可以吗?

    谢谢你的时间,
    马丁

  • 0 投票
    2 回答
    2688 浏览

    c++ - stringstream临时ostream返回问题

    我正在创建一个包含以下部分的记录器:

    带着这样的想法:

    这一切都按预期工作,但是当我这样做时:

    这没用:

    导致“格式”包含垃圾数据而不是通常的正确字符串。

    我认为这是因为 << 运算符返回的临时 ostream 超过了它来自的字符串流。

    还是我错了?

    (为什么 string() 以这种方式工作?是因为它返回对自身的引用吗?我假设是的。)

    我真的很想这样做,因为我会在登录发布模式时消除额外的分配。

    任何以这种方式完成它的指针或技巧都将受到欢迎。在我的实际解决方案中,我有许多不同的日志功能,它们都比这更复杂。所以我希望在调用代码中以某种方式实现它。(如果可能,不要修改我的#define)

    只是给出一个想法,我的一个实际#defines的一个例子:

    它匹配采用 char*、string() 和 ostream() 的 varargs printf-like log 函数以及采用 string()、exception() 和 HRESULT 的非 vararg 函数。

    0 投票
    11 回答
    105023 浏览

    c++ - 为什么非常量引用不能绑定到临时对象?

    为什么不允许获取对临时对象的非常量引用,哪个函数getx()返回?显然,这是 C++ 标准禁止的,但我对这种限制的目的感兴趣,而不是对标准的引用

    1. 很明显,对象的生命周期不能成为原因,因为C++ 标准不禁止对对象的常量引用。
    2. 很明显,上述示例中的临时对象不是常量,因为允许调用非常量函数。例如,ref()可以修改临时对象。
    3. 此外,ref()允许您欺骗编译器并获得指向此临时对象的链接,从而解决了我们的问题。

    此外:

    他们说“将一个临时对象分配给 const 引用会延长该对象的生命周期”和“尽管对非 const 引用什么也没说”。我的附加问题。以下分配是否会延长临时对象的生命周期?

    0 投票
    2 回答
    490 浏览

    c++ - 是否可以更改临时对象并将其作为参数传递?

    是否可以更改临时对象并将其作为参数传递?

    众所周知,将临时对象分配给 const 引用会延长该临时对象的生命周期。那么我的代码的#4 和#5 行呢?引用 x 在函数 func_ref 中是否始终有效?问题是 operator-- 返回一些引用,编译器看不到这个引用和我们创建的临时值之间的任何关系。