小编Omn*_*ous的帖子

这两种C++初始化程序语法在语义上是否有所不同?

假设以下代码是正确编译的合法代码,即T类型名称,这x是变量的名称.

语法一:

T a(x);
Run Code Online (Sandbox Code Playgroud)

语法二:

T a = x;
Run Code Online (Sandbox Code Playgroud)

这两个表达式的确切语义是否有所不同?如果是这样,在什么情况下呢?

如果这两个表达式确实有不同的语义,我也很好奇标准的哪个部分谈到这一点.

此外,如果有特殊情况时,T是标量型的名称(又名,int,long,double,等...),有什么区别时,T是标量型与非标型?

c++ language-features initializer language-lawyer

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

在 VS Code 中输入 Unicode 符号

我在输入 ? Visual Studio Code 编辑器中的符号 (U+03A9)。

在我的 Mac 上,我通常可以用option+输入它,z但它似乎在代码中不起作用。

许多其他组合似乎工作得很好(例如, ? option+x正确输入)。

我想知道 VS Code 是否正在拦截其他键盘快捷键的option+ z。我搜索了键盘快捷键列表,但没有找到任何相关内容。

unicode macos visual-studio-code

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

有没有办法在C++ 17中简化这个C++ 14递归模板?

poly_eval函数将计算在x的特定值处评估具有特定系数集的多项式的结果.例如,poly_eval(5, 1, -2, -1)计算x ^ 2 - 2x - 1,其中x = 5. constexpr如果给它常量,它将全部如此,它将在编译时计算答案.

它目前使用递归模板在编译时构建多项式求值表达式,并依赖于C++ 14 constexpr.我想知道是否有人能想出一个很好的方法来删除递归模板,也许是使用C++ 17.运行模板的代码使用__uint128_tclang和gcc中的类型.

#include <type_traits>
#include <tuple>

template <typename X_t, typename Coeff_1_T>
constexpr auto poly_eval_accum(const X_t &x, const Coeff_1_T &c1)
{
    return ::std::pair<X_t, Coeff_1_T>(x, c1);
}

template <typename X_t, typename Coeff_1_T, typename... Coeff_TList>
constexpr auto poly_eval_accum(const X_t &x, const Coeff_1_T &c1, const Coeff_TList &... coeffs)
{
    const auto &tmp_result = poly_eval_accum(x, coeffs...);
    auto saved = tmp_result.second + tmp_result.first …
Run Code Online (Sandbox Code Playgroud)

c++ c++14 c++17

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

是否可以关闭'svn export'的关键字替换?

我想用来svn export从Subversion存储库导出一堆文件.我还希望放弃对这些文件中找到的任何关键字进行关键字扩展,而不管svn:keywords此文件的属性如何.有没有办法做到这一点?

我这样做是因为我想将存储库中的文件与一组不在存储库中且具有未扩展关键字的相同文件进行比较.很久以前我在CVS中有一个存储库.很久以前我做了一个标志日转换为Subversion.现在我正在尝试将整个历史转换为Mercurial,我想确切地确定Subversion中的哪个版本与使用diff的CVS中的最后一个版本最接近,而不必涉及扩展的关键字差异.

svn cvs version-control mercurial

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

C++ - 过度使用虚拟方法?

最近我得到了一个任务,我必须实现类似于以下内容:

有些动物具有某些属性,例如:

DOG1:名称:tery,颜色:白色,喜欢的饮料:葡萄汁
DOG2:名称:奇瓦,颜色:黑色,最爱的饮料:柠檬水
Bird1:名称:翠儿,canfly:是的,cansing:没有
BIRD2:名称:招架,canfly:不,cansing:是的

如何使用OOP实践有效地在C++中实现这一目标?

我做了这样的事情:

class Animal {  
    Animal(...);  
    ...  
    public String getName() const;  
    public void setName(string s);  
    ...  
    private:  
    String name;  
}  

class Bird : public Animal {  
    Bird(...);  

    public bool canFly() const;  
    public void setCanFly(bool b);  
    ...

    private:  
    bool canFly;  
    bool canSing;  
}  

class Dog : public Animal {  
    ...  
}  
Run Code Online (Sandbox Code Playgroud)

这个实现的问题是我不能从多态性中受益:

Animal* p = new Anima(...);  
...  
p->canFly();  
Run Code Online (Sandbox Code Playgroud)

我必须使用铸造:

((Bird*)p)->canFly();  
Run Code Online (Sandbox Code Playgroud)

最后我被批评没有使用在基类的虚函数,并使用强制转换,而不是面向对象的.

但在我看来,在这里使用虚函数是没有意义的,因为getName()应该在基类中以避免同一方法的多个实现.例如,canFly不是狗的有效财产.

然后,我必须为彼此(未来)动物定义一些荒谬的东西,这些动物也从基类继承,这会产生不必要的开销:

bool Dog::canFly () const {
return false;
}
Run Code Online (Sandbox Code Playgroud)

谁在这里,我没有得到多态的基本原理?

c++ oop

5
推荐指数
3
解决办法
917
查看次数

为什么我在声明中说int*p = NULL,但在测试中p!= NULL,为什么不用*p!= NULL来匹配声明?

在c ++中,如果我们指定一个指针值NULL,为什么我们检查是否*p!=NULL相反p!=NULL

我在教程中找到了这段代码.

int *p = NULL;
char *q = NULL;
// ...
if (p!=NULL) cout << *p;
Run Code Online (Sandbox Code Playgroud)

提前致谢

c++ pointers

5
推荐指数
3
解决办法
4340
查看次数

如何将文件的内容复制到虚拟内存中?

我有一个小文件,我检查它并计算其中的字节数:

while(fgetc(myFilePtr) != EOF)
{

   numbdrOfBytes++;

}
Run Code Online (Sandbox Code Playgroud)

现在我分配相同大小的虚拟内存:

BYTE* myBuf = (BYTE*)VirtualAlloc(NULL, numbdrOfBytes, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
Run Code Online (Sandbox Code Playgroud)

我现在想将文件的内容复制到 nyBuf 中。我该怎么做?

谢谢!

c++ windows operating-system virtualalloc

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

在给定的翻译单元中,文件级静态变量的顺序是否始终相同?

我有一个程序分为两个源文件:

example.cpp

#include <iostream>

class A {
 public:
   A(int x) {
      ::std::cout << "In A(" << x << ")\n";
   }
};

static A first(1);
static A second(2);
Run Code Online (Sandbox Code Playgroud)

例子 __ main.cpp

int main(int argc, const char *argv[])
{
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

该计划的输出是否保证为:

In A(1)
In A(2)
Run Code Online (Sandbox Code Playgroud)

在所有平台和编译器上?如果是这样,它在标准中的位置是这样说的吗?如果我使用名称空间first并且second出现在不同的名称空间中,这是否重要?如果它们不是静态的并且我使用匿名命名空间怎么样?

c++ initialization static-initialization static-order-fiasco

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

如何在python中为电子邮件创建消息ID?

我想向使用Python的内置创建的消息中添加一个符合RFC2822的唯一Message-ID标头。我将如何做呢?图书馆本身有办法吗?email

python email header rfc2822

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

我将 Boost.Python 中的 .so 文件放在哪里,以便我可以将其作为模块导入,以及如何将它与 Python 2 和 3 一起使用

我在名为 cpp_examples 的文件夹中有以下文件。

#include <boost/python.hpp>
#include <string>

const std::string hello() {
return std::string("hello, zoo");
}

BOOST_PYTHON_MODULE(zoo) {
// An established convention for using boost.python.
using namespace boost::python;
def("hello", hello);
}
Run Code Online (Sandbox Code Playgroud)

我运行以下命令进行编译。

sumith@rztl516-Lenovo-G575:~/cpp_examples$ g++ zoo.cpp -I/usr/include/python2.7 -I/usr/lib/x86_64-linux-gnu/ -lboost_python  -lpython2.7 -o zoo.so -shared -fPIC
Run Code Online (Sandbox Code Playgroud)

它被编译并给了我一个 zoo.so 文件。当我尝试在同一个文件夹中导入和运行 zoo.hello() 时,它可以工作,但没有在 cpp_examples 文件夹外导入

sumith@rztl516-Lenovo-G575:~/cpp_examples$ python2
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import zoo
>>> zoo.hello()
'hello, zoo'
>>> exit() …
Run Code Online (Sandbox Code Playgroud)

c++ python boost boost-python python-3.x

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