假设以下代码是正确编译的合法代码,即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是标量型与非标型?
我在输入 ? Visual Studio Code 编辑器中的符号 (U+03A9)。
在我的 Mac 上,我通常可以用option+输入它,z但它似乎在代码中不起作用。
许多其他组合似乎工作得很好(例如, ? option+x正确输入)。
我想知道 VS Code 是否正在拦截其他键盘快捷键的option+ z。我搜索了键盘快捷键列表,但没有找到任何相关内容。
该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) 我想用来svn export从Subversion存储库导出一堆文件.我还希望放弃对这些文件中找到的任何关键字进行关键字扩展,而不管svn:keywords此文件的属性如何.有没有办法做到这一点?
我这样做是因为我想将存储库中的文件与一组不在存储库中且具有未扩展关键字的相同文件进行比较.很久以前我在CVS中有一个存储库.很久以前我做了一个标志日转换为Subversion.现在我正在尝试将整个历史转换为Mercurial,我想确切地确定Subversion中的哪个版本与使用diff的CVS中的最后一个版本最接近,而不必涉及扩展的关键字差异.
最近我得到了一个任务,我必须实现类似于以下内容:
有些动物具有某些属性,例如:
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 ++中,如果我们指定一个指针值NULL,为什么我们不检查是否*p!=NULL相反p!=NULL?
我在教程中找到了这段代码.
int *p = NULL;
char *q = NULL;
// ...
if (p!=NULL) cout << *p;
Run Code Online (Sandbox Code Playgroud)
提前致谢
我有一个小文件,我检查它并计算其中的字节数:
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 中。我该怎么做?
谢谢!
我有一个程序分为两个源文件:
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
我在名为 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++ ×7
python ×2
boost ×1
boost-python ×1
c++14 ×1
c++17 ×1
cvs ×1
email ×1
header ×1
initializer ×1
macos ×1
mercurial ×1
oop ×1
pointers ×1
python-3.x ×1
rfc2822 ×1
svn ×1
unicode ×1
virtualalloc ×1
windows ×1