小编spr*_*aff的帖子

当输入行结尾混合时,std :: getline替代

我试图从a读取行,std::istream但输入可能包含'\r' 和/或 '\n',所以std::getline没有用.

很抱歉大喊,但这似乎需要强调......

该输入可以包含任一换行类型或两者.

有没有标准的方法来做到这一点?目前我正在努力

char c;
while (in >> c && '\n' != c && '\r' != c)
    out .push_back (c);
Run Code Online (Sandbox Code Playgroud)

......但这会跳过空白.D'哦!std::noskipws- 需要更多的摆弄,现在它是misehaving.

当然必须有更好的方法吗?!?

c++ stdin stdio line-endings istream

7
推荐指数
1
解决办法
3176
查看次数

为什么C++ 11和PHP闭包需要声明封闭变量?

C++和PHP中的函数文字要求程序员从当前词法上下文中指定它们使用的变量.这个要求背后的原因是什么?

我想这不适用于编译器/解释器,因为可以从函数文字的主体中静态地推断出这些信息.它只是为了引起读者的注意吗?

php c++ closures c++11

7
推荐指数
1
解决办法
224
查看次数

不是最重要的常数..但这是什么?

这是输出,F~但我期待~F

#include <iostream>

struct Foo {
    int _x;
    operator const int & () const {return _x;}
    ~ Foo () {std :: cout << "~";}
};

void foo (const int &)
{
    std :: cout << "F";
}

int main ()
{
    foo (Foo ());
}
Run Code Online (Sandbox Code Playgroud)

我把它构建为一个反例,表明最重要的const是一个例外而不是规则.它通常写成

当const引用绑定到临时引用时,该临时值的生存期将延长到引用的生命周期

我试图说明,虽然Foo()是临时的,_x转换运算符返回的引用不是,并且上面的代码是不安全的.

但是输出似乎证明了这个例子安全的,临时的生命周期Foo()是由对其成员之一的const引用的存在而扩展的.

这是正确的吗?标准中的哪个指定了?

c++ const reference object-lifetime

7
推荐指数
1
解决办法
274
查看次数

以行高为宽度单位

编辑:我强调不想依赖任何固定尺寸

我有一个图像想要与文本内联显示。我想要图像

a) 是正方形的,并且

b) 与文字一样高。

想象一下,存在一个名为“H”的 CSS 单元,它等于一条线的高度,就像“ex”等于“x”的高度一样。我希望能够编写这样的代码:

img.myclass {
    width: 1H;
    height: 1H;
}
Run Code Online (Sandbox Code Playgroud)

看来这样的单位实际上并不存在。我对吗?

如果没有这样的单位(明确地说,我想要从一行基线到下一行基线的距离)那么如何在没有Javascript的情况下实现行填充方形图像的目标?

css

7
推荐指数
1
解决办法
4464
查看次数

CMake添加一个库,这是一组其他库

我有一个核心库,分支到其他几个库.在CMakeLists.txt中它看起来有点像这样

ADD_LIBRARY (core ...)
ADD_LIBRARY (branch1 ...)
ADD_LIBRARY (branch2 ...)
...
TARGET_LINK_LIBRARIES (branch1 core)
TARGET_LINK_LIBRARIES (branch2 core)
...
Run Code Online (Sandbox Code Playgroud)

我有一些可执行文件可能依赖于任何或所有分支.对于那些依赖所有分支而不是写作的人

ADD_EXECUTABLE (foo ...)
TARGET_LINK_LIBRARIES (foo branch1 branch2 ...)
Run Code Online (Sandbox Code Playgroud)

我试过了

ADD_LIBRARY (all-branches)
TARGET_LINK_LIBRARIES (all-branches branch1 branch2 ...)
Run Code Online (Sandbox Code Playgroud)

然后

TARGET_LINK_LIBRARIES (foo all-branches)
Run Code Online (Sandbox Code Playgroud)

这有效,但CMake吐出警告.

You have called ADD_LIBRARY for library all-branches without any source files. This typically indicates a problem with your CMakeLists.txt file
Run Code Online (Sandbox Code Playgroud)

我理解这条消息,但这不是错误.CMake认为构建这样的元库是一种可接受的方式吗?

cmake

7
推荐指数
2
解决办法
5595
查看次数

为什么我不能声明包含模板容器和模板包含值的类型?

为什么这个有效的C++不是?

template <typename Container, typename T>
bool
foo (const Container <T> &);
Run Code Online (Sandbox Code Playgroud)

g ++给了我Container is not a template这显然不是它的真正含义.

尝试template <typename Container> template <typename T>也不起作用,也不起作用const typename Container <T> &

对我来说,似乎有必要定义一个在容器和包含类型上都是通用的接口.

所以,

  • 在标准方面,为什么不允许这样做?
  • 在设计标准方面,为什么不允许这样做,会引起问题吗?
  • 除了基于迭代器的接口之外,C++ 14中是否有一种解决方法?

c++ templates

7
推荐指数
1
解决办法
95
查看次数

成员初始化列表真的更有效吗?

我同意这样的共识,即通常最好在成员初始化列表中初始化C++数据成员而不是构造函数的主体,但我对此解释持怀疑态度

构建构造函数的另一种(低效)方法是通过赋值,例如:Fred::Fred() { x_ = whatever; }.在这种情况下,表达式会导致创建单独的临时对象,并且此临时对象将传递到x_对象的赋值运算符中.然后该临时对象被破坏了;.那效率很低.

这实际上是对的吗?我原以为编译器会忽略默认构造的临时对象,该对象会立即被正文中的赋值所取代.我不知道为什么我预料到这一点,但阅读了上述说法,我想我已经悄悄地假设了多年.

成员初始化列表实际上更有效吗?如果是这样,是因为这个原因吗?

c++ performance constructor member-initialization assignment-operator

7
推荐指数
2
解决办法
800
查看次数

docker 容器在启动期间无法打开卷挂载中的符号链接文件

我有一个使用 docker-compose.yml 启动的 docker 容器,其中包含

service: my-service
  volumes:
  - /tmp/mount/opt/my-app:/opt/my-app
Run Code Online (Sandbox Code Playgroud)

/tmp/mount/opt例如,有符号链接/tmp/mount/opt/my-app/test1.cfg指向/host/path/test1.cfg

当容器启动时,它会失败并显示如下错误:

my-service | Failed to stat config file "/opt/my-app/test1.cfg": No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是,如果我docker exec -ti the_same_container bash然后cat /opt/my-app/test1.cfg我看到的正是预期的内容。

另外,如果在主机上运行cp -r -L /tmp/mount /tmp/mount_copy并修改 yml

service: my-service
  volumes:
  - /tmp/mount_copy/opt/my-app:/opt/my-app
Run Code Online (Sandbox Code Playgroud)

然后一切正常。

换句话说,挂载目录中的符号链接可以在容器启动后被容器读取,但在启动期间则不能读取,并且挂载该目录的非符号链接克隆就可以了。

为什么符号链接在 docker 中会有这样的行为?

linux docker

7
推荐指数
1
解决办法
6338
查看次数

SQL选择union中的多个项目

我正在执行几个选择并希望计算重叠.例:

SELECT id FROM foo WHERE ...
SELECT id FROM bar WHERE ...
SELECT id FROM baz WHERE ...
Run Code Online (Sandbox Code Playgroud)

分别调用这些查询a,b和c.假设给出(1,2,3,4,5),b给出(1,3,5),c给出(4,5,6).我想结合这些并计算多重性.对于上面的例子,我正在寻找的结果是

id | multiplicity
-----------------
1  | 2
2  | 1
3  | 2
4  | 2
5  | 3
6  | 1
Run Code Online (Sandbox Code Playgroud)

如何在一个查询中在MySQL5中执行此操作?(a,b和c部分可以是普通选择或存储过程).

mysql sql union mysql5

6
推荐指数
1
解决办法
577
查看次数

spring-boot-devtools 自动重启不起作用

我有一个使用 mvn 构建的有效 Spring Boot 2.25 应用程序。根据此文档,我添加

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

从文档:

由于 DevTools 监控类路径资源,触发重启的唯一方法是更新类路径。更新类路径的方式取决于您使用的 IDE。在 Eclipse 中,保存修改后的文件会导致更新类路径并触发重新启动。在 IntelliJ IDEA 中,构建项目(Build -> Build Project)具有相同的效果。

随着应用程序的运行,我尝试了一个简单的

touch /path/to/app.jar
Run Code Online (Sandbox Code Playgroud)

期待应用程序重新启动,但什么也没发生。

好吧,也许它正在做一些更聪明的事情。我修改了一些源 .java,重新编译了 .jar,然后用cp它来替换正在运行的 .jar 文件,然后……什么也没发生。

也来自文档

DevTools 依靠应用程序上下文的关闭挂钩在重新启动期间关闭它。如果您禁用了关闭钩子 (SpringApplication.setRegisterShutdownHook(false)),它就不能正常工作。

我不是在做这个。

DevTools 需要自定义ApplicationContext 使用的ResourceLoader。如果您的应用程序已经提供了一个,它将被包装。不支持直接覆盖 ApplicationContext 上的 getResource 方法。

我不是在做这个。

如果这很重要,我正在 Docker 容器中运行它。从文档:

运行完全打包的应用程序时,开发人员工具会自动禁用。如果您的应用程序是从 java -jar 启动的,或者是从特殊的类加载器启动的,则它被视为“生产应用程序”。如果这不适用于您(即,如果您从容器运行您的应用程序),请考虑排除 devtools 或设置 -Dspring.devtools.restart.enabled=false 系统属性。

我不明白这意味着什么,或者它是否相关。

我想重新编译一个 .jar 并在正在运行的 docker 容器中替换它,并在不重新启动容器的情况下触发和应用程序重新启动。我怎样才能做到这一点?

编辑:我正在使用mvn重建 jar,然后docker cp在正在运行的容器中替换它。(IntelliJ IDEA 声称要重建项目,但实际上并未 …

java docker spring-boot spring-boot-devtools

6
推荐指数
2
解决办法
729
查看次数