小编Duc*_*ers的帖子

C++零初始化 - 为什么这个程序中的`b`未初始化,但是`a`被初始化了?

根据Stack Overflow问题的接受(且唯一)答案,

使用定义构造函数

MyTest() = default;
Run Code Online (Sandbox Code Playgroud)

而是将零初始化对象.

那为什么以下,

#include <iostream>

struct foo {
    foo() = default;
    int a;
};

struct bar {
    bar();
    int b;
};

bar::bar() = default;

int main() {
    foo a{};
    bar b{};
    std::cout << a.a << ' ' << b.b;
}
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

0 32766
Run Code Online (Sandbox Code Playgroud)

两个构造函数都是默认的?对?对于POD类型,默认初始化为零初始化.

根据这个问题的接受答案,

  1. 如果POD成员未在构造函数中初始化,也未通过C++ 11类内初始化,则默认初始化.

  2. 无论堆栈还是堆,答案都是一样的.

  3. 在C++ 98中(而不是之后),新的int()被指定为执行零初始化.

尽管试图将我的(虽然很小)头部包裹在默认构造函数默认初始化之间,但我无法提出解释.

c++ initialization language-lawyer

129
推荐指数
3
解决办法
7552
查看次数

用于在目录中的cmd中运行命令的批处理文件

我想要一个批处理文件(必须放在桌面上),它执行以下操作;

  • 打开cmd
  • 导航到目录,例如 C:\activiti-5.9\setup
  • 在目录中运行命令,例如ant demo.start(此命令运行activiti服务器)

我尝试了以下内容到达目录,但如何运行命令,"ant demo.start"

START cmd.exe /k "cd C:\activiti-5.9\setup"
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助.

编辑:

请参阅下面的zb226答案:如果你能回答我的另一个问题是如何让cmd以管理员身份运行?以下工作会怎样?

START cmd /K "runas /user:administrator & cd C:\activiti-5.9\setup & ant demo.start"

batch-file

18
推荐指数
3
解决办法
18万
查看次数

具有透明背景的 Flutter 卡片

我正在尝试使我的卡片透明,以便在背景中显示该内容。

我曾尝试将卡片的颜色属性设置为透明,但它显示为不透明的灰色背景。

结果

我也尝试使用具有不同不透明度的白色,但结果不是透明的纯白色。

   Card(
      color: Colors.transparent,
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            CardLabelSmall("Current Premix Plan Document"),
            Expanded(child: PremixPlanDocList()),
            Row(
              children: <Widget>[
                Expanded(
                  child: RaisedButton(
                    onPressed: () async {
                      homeBloc.retrieveCurrentMrfPremixPlan();
                    },
                    child: const Text("Retrieve Premix Plan"),
                  ),
                ),
              ],
            ),
          ],
        ),
      ),
    );
Run Code Online (Sandbox Code Playgroud)

其他白色但仍然不是白色

color: Colors.white70,
color: Colors.white54,
color: Colors.white30,
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得透明的纯白色背景?

colors flutter

12
推荐指数
3
解决办法
3万
查看次数

如何在 Python 中显示 SVG 图像

我正在阅读有关如何用 Python 编写国际象棋程序的教程。

它使用python-chess引擎。该引擎的函数显然会返回 SVG 数据,可用于显示棋盘。

  • 教程中的代码:
import chess
import chess.svg

from IPython.display import SVG

board = chess.Board()
SVG(chess.svg.board(board=board,size=400))  
Run Code Online (Sandbox Code Playgroud)

但是当我运行该代码时,我看到的只是终端中的一行,没有图像。

<IPython.core.display.SVG object>

本教程简要介绍了 Jupyter Notebooks 以及如何使用它们来显示 SVG 图像。我没有使用 Jupyter Notebooks 的经验,尽管我从 pip 安装了这个包并且稍微了解了如何使用它,但我在解决原来的棋盘问题上并没有取得太大进展。但我确实拥有使用 C++ 进行 Qt 开发的经验,并且由于 Qt 具有 Python 绑定,因此我决定使用这些绑定。

这是我写的:

import sys
import chess
import chess.svg
from PyQt5 import QtGui, QtSvg
from PyQt5.QtWidgets import QApplication
from IPython.display import SVG, display

app = QApplication(sys.argv);

board = chess.Board(); 
svgWidget = QtSvg.QSvgWidget(chess.svg.board(board=board, size=400));
#svgWidget.setGeometry(50,50,759,668)
svgWidget.show()

sys.exit(app.exec_()) …
Run Code Online (Sandbox Code Playgroud)

python svg pyqt pyqt5 python-chess

12
推荐指数
1
解决办法
2万
查看次数

从mozilla.rsa文件中解析插件ID

我试图阅读mozilla.rsa文件并使用C++解析插件ID.

我的努力:

std::string rsaPath = xpiDir + "\\META-INF\\mozilla.rsa";

int rets = system(("CertUtil " + rsaPath + " | findstr " + "S=CA").c_str());

//
.....
My additional logic.............
.....
///
Run Code Online (Sandbox Code Playgroud)

它在Windows 7及更高版本上运行良好.但是,在Windows XP上没有.

CERTUTIL

有没有办法使用C或C++ 从mozilla.rsa文件中读取插件ID ?

c++ mozilla certificate firefox-addon

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

ValueError:无法处理 Python/MySQL 中的参数

我是新手

我想防止每次人们注册时出现重复的用户名。

这是我截取的代码:

def submit(self):
    username_info = username.get()
    username_password = password.get()

    #connect to db
    db = mysql.connector.connect(host = 'localhost', user = 'root', password = '', database = 'user')

    #create a cursor
    mycursor = db.cursor()
    #insert to db
    sql = ("INSERT INTO useraccess (user_type, password) VALUES (%s, %s)")

    query = (username_info, username_password)
    mycursor.execute(sql, query)
    #commit
    db.commit()

    #create a messagebox
    messagebox.showinfo("Registration", "Successfully Register")

    #if username has been used
    find_user = ("SELECT * FROM useraccess WHERE user_type = ?")
    user_query = (username_info)

    mycursor.execute(find_user, …
Run Code Online (Sandbox Code Playgroud)

python parameters valueerror

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

如果函数被称为constexpr,则有条件static_assert

我知道有一个针对constexpr()运算符的提议,但这尚未在gcc / clang中实现。我也知道使用一些技巧来实现,例如机器代码编辑:

http://saadahmad.ca/detecting-evaluation-context-inside-constexpr-functions/

我想知道是否有某种受限的解决方案:

struct F {
    constexpr F(int v) {
         if constexpr(constexpr()) {
             static_assert(v > 0);
         }
         else {
             assert(v > 0);
         }
    }
};

// ...

constexpr F f{0}; // should trigger a compile-time error
Run Code Online (Sandbox Code Playgroud)

我知道无法以这种方式使用static_assert,但这只是为了澄清问题。

c++ static-assert constexpr

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

vscode“没有可用的重构”c++,(带有arduino扩展)

当我对 Arduino 项目进行编程并迫切需要重构时,我收到此错误消息CTRL+SHIFT+R

没有可用的重构

我在.cpp文件以及.ino.h文件中也得到了这一点。我安装了扩展 Arduino、C/C++、C++ Intellisense,并且我的文件编程语言设置为 C++。 我的 vscode 扩展

我在 Ubuntu 18.10 上使用 vscode。我使用存储库中的这些说明安装了 vscode ,并将其更新到最新版本(1.31.0)。我究竟做错了什么?

以下是 vscode 中“about”的一些其他信息:

Version: 1.31.0
Commit: 7c66f58312b48ed8ca4e387ebd9ffe9605332caa
Date: 2019-02-06T08:51:24.856Z
Electron: 3.1.2
Chrome: 66.0.3359.181
Node.js: 10.2.0
V8: 6.6.346.32
OS: Linux x64 4.18.0-13-generic
Run Code Online (Sandbox Code Playgroud)

我已经在这里发布了这个问题,但我之前不知道这个建议: https: //github.com/Microsoft/vscode/issues/new/choose

c++ linux refactoring arduino visual-studio-code

5
推荐指数
1
解决办法
6108
查看次数

如何修复 VSCode 中命名空间“std”没有成员“sqrt”?

我能够成功编译并执行我的代码。但是,VSCode 不断向我显示错误消息:

命名空间 std 没有成员“sqrt”。

我调整了properties.json。请告知为什么 vscode 显示此错误。我尝试用谷歌搜索但没有成功。

#include <iostream>
#include <cmath>
#include <complex>

int main() {
 double a,b,c;
 int root1, root2;


  std::cout<<"Enter a: \n";
  std::cin >> a;
  std::cout<<"Enter b: \n";
  std::cin >> b;
  std::cout<<"Enter c: \n";
  std::cin >> c;

  root1 = (-b + std::sqrt (b*b - 4*a*c)) / (2*a);
  std::cout<<"Root 1 Number: " << root1 << "\n";

  root2 = (-b - std::sqrt (b*b - 4*a*c)) / (2*a);
  std::cout<<"Root 2 Number: " << root2 << "\n";

}

json:
{
    "configurations": …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-code

5
推荐指数
1
解决办法
3691
查看次数

进程间通信:传递 C 风格的结构与 C++ 对象

警告/免责声明:

这个问题包含了heresay,但在我过去半小时左右的小调查中,我无法找到以下声明的答案。我只是好奇这里是否有人已经知道这一点。

这个问题没有代码。只是技术问题。

背景:

我有一个遗留应用程序,它使用在进程之间传递的 C 样式结构进行进程间通信。这很有效,并且已经工作了很多年,甚至在我来到这个星球之前很久:P。

我应该编写一个新的流程来成为这个应用程序的一部分。不知不觉中,我用 C++ 编写了它,假设我们使用的任何 IPC 都可以处理这个问题。不幸的是,后来我(从同事那里)发现现有的基础设施只能传递 C 风格的结构体。

“未经证实”的声明/声明:

此外,一位同事列出了在这种情况下 C++ 是一个糟糕选择的以下原因。

  1. C++ 对象有虚表。C 风格的结构只是变量和值。因此,C 风格的结构可以在进程之间传递,而 C++ 对象则不能。

  2. 使用 C 风格的结构,我们可以嵌入诸如结构大小之类的信息,这样双方都知道期望什么和发送什么,但对于 C++ 对象,这是不可能的,因为“vtable 的大小可能会有所不同”

  3. '如果我们改变编译器,那就更糟了。对于 C++ 对象,我们将有更多的排列来处理。

调查索赔:

不用说,这位同事对C有点偏见,但他比我更有经验,可能知道他在说什么。我是语言不可知论者。但这立即让我想到了。怎么能不能用C++进行进程间通信呢?我用谷歌搜索,第一次点击总是来自 stackoverflow,就像这样:

进程间通信建议

我查看了此处列出的不同 IPC 方法。 https://en.wikipedia.org/wiki/Inter-process_communication#Approaches

我的意思是,我跟进了列表中的每个方法,如管道或共享内存等,每个人都不断指出的唯一警告是,不能像这样传递指针(废话!当然)和一些问题同步可能会蔓延 - je nachdem。

但是我找不到任何可以反驳或证实他的“主张”的东西。(当然,我可以在剩下的时间里继续挖掘。:P)

问题:

  1. 他的三个主张真的如此还是只是FUD?考虑到这一点,我想要传递的那些对象中的所有内容也只是 POD 变量和一些 STL 容器,如std::vectorandstd::pair和它们的值(没有指针或任何东西),以及这些变量的 getter。除了虚拟析构函数之外没有任何虚拟函数,它存在是因为我从一个基本消息类继承了所有消息,因为当时我在想可能有一些通用的基本功能。(我现在可以很容易地摆脱这个基类,因为到目前为止还没有真正常见的东西!谢天谢地,出于某种原因,我将消息的解析和格式化保留在一个单独的类中。运气还是远见?:D)

  2. 它实际上也让我想知道,编译器如何知道结构何时是 C 样式结构,因为我们在整个项目中都使用 g++ 编译器?是否使用了“virtual”关键字?

  3. 我不是在为我的情况寻求解决方案。我可以将这些对象的结果包装到结构中并通过 IPC 传递它们,或者我可以摆脱上面“我的”第 1 点中所述的基类和虚拟析构函数。

不需要 Boost 或任何 …

c c++ struct ipc object

4
推荐指数
1
解决办法
846
查看次数