为什么此代码会返回警告
警告:ISO C++禁止将字符串常量转换为'char*'[ - WRrite-strings]
如果
在对象声明或非静态成员函数中使用的constexpr说明符(直到C++ 14)暗示const.函数或静态成员变量(自C++ 17)声明中使用的constexpr说明符暗示内联.
#include <cassert>
#include <string>
#include <iostream>
struct A
{
// warning: ISO C++ forbids converting a string constant to ‘char*’
static constexpr char* name_ = "A";
static constexpr char* name() { return name_; };
};
int main()
{};
Run Code Online (Sandbox Code Playgroud)
如果我添加一个const后constexpr,警告消失了:
#include <cassert>
#include <string>
#include <iostream>
struct A
{
static constexpr const char* name_ = "A";
static constexpr const char* name() { return name_; }; …Run Code Online (Sandbox Code Playgroud) 我想测量和比较不同函数调用的开销.在处理扩展类的同时最小化代码修改的两种替代方法的意义上是不同的:
将这两个选项与根本不调用任何函数进行比较.我也知道在设计支持动态多态的类时通常使用的NVI习惯用法 - 我使用的示例只是开销的基准.
这是我试图用于此目的的代码:
#include <iostream>
#include <vector>
#include <chrono>
#include <ctime>
#include <memory>
class Interface
{
public:
virtual double calculate(double t) = 0;
virtual ~Interface() = default;
};
class Square
:
public Interface
{
public:
double calculate(double d)
{
return d*d;
}
};
class SquareStaticFunction
{
public:
static double calculate(double d)
{
return d*d;
}
};
class SquareMemberFunction
{
public:
double calculate(double d)
{
return d*d;
}
};
template<typename Function>
class Generic
:
public …Run Code Online (Sandbox Code Playgroud) g ++编译器有一个生成宏扩展代码(-E)的标志,所以我想知道在实际编译发生之前是否有一种方法可以在模板实例化之后查看程序.
这个小例子:
An example code snippet:
~~~{.cpp}
class A
{
public:
static void f1 () {};
virtual void f2 () = override;
};
~~~
Run Code Online (Sandbox Code Playgroud)
可用于生成PDF输出:
pandoc -o block-code.pdf block-code.txt
Run Code Online (Sandbox Code Playgroud)
导致

代码和文本的字体大小相等.如何更改pdf(LaTex)pandoc输出的代码片段的字体大小?
这是关于如何对elementsSize()成员函数做什么的问题,关于自动返回类型推导:
#include <iostream>
#include <vector>
template<typename Element>
class ElementVector
{
std::vector<Element> elementVec_;
// Other attributes.
public:
ElementVector() = default;
ElementVector(const std::initializer_list<Element>& list)
:
elementVec_(list)
{}
auto elementsSize() // -> decltype(elementVec_size())
{
return elementVec_.size();
}
};
using namespace std;
int main(int argc, const char *argv[])
{
ElementVector<double> e = {1.2, 1.3, 1.4, 1.5};
cout << e.elementsSize() << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致编译器警告(gcc 4.8.2):
main.cpp:20:27: warning: ‘elementsSize’ function uses ‘auto’ type specifier without trailing return type [enabled by default]
auto elementsSize() // …Run Code Online (Sandbox Code Playgroud) 我想对未应用的循环和应用于triangle对象的for循环之间的执行速度差异进行基准测试.整个示例可在此处获得.
这是完整的代码:
#include <iostream>
#include <vector>
#include <array>
#include <random>
#include <functional>
#include <chrono>
#include <fstream>
template<typename RT>
class Point
{
std::array<RT,3> data;
public:
Point() = default;
Point(std::initializer_list<RT>& ilist)
:
data(ilist)
{}
Point(RT x, RT y, RT z)
:
data({x,y,z})
{};
RT& operator[](int i)
{
return data[i];
}
RT operator[](int i) const
{
return data[i];
}
const Point& operator += (Point const& other)
{
data[0] += other.data[0];
data[1] += other.data[1];
data[2] += other.data[2];
return *this;
} …Run Code Online (Sandbox Code Playgroud) 我曾经使用typeid以下代码(cppreference)获取std :: vector :: size_type的类型名称和零大小的类A.
#include<iostream>
#include <vector>
#include <typeinfo>
using namespace std;
class A {};
int main()
{
vector<int> v(10);
vector<int>::size_type s = v.size();
A a;
cout << typeid(s).name() << endl;
cout << typeid(a).name() << endl;
};
Run Code Online (Sandbox Code Playgroud)
我把它作为输出:
m
1A
Run Code Online (Sandbox Code Playgroud)
我猜"A"之前的"1"是空基类优化的结果,但"m"代表什么,这是正常的吗?
我使用以下gcc版本:g ++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3
使用git list-files提供了我在其中跟踪的目录和文件.有这样的命令:
git list-directories
Run Code Online (Sandbox Code Playgroud)
或类似的东西,只列出跟踪的非空非递归目录名称?
Jupyter 笔记本支持方程编号,但我在使用 Juyter Lab 的 Markdown 笔记本中使用的 LaTex 生成方程编号时遇到困难。此功能是否可用?如果可用,我该如何使其发挥作用?
从boost库文档中我读到了这个:
从概念上讲,智能指针被视为拥有指向的对象,因此在不再需要时负责删除对象.
我有一个非常简单的问题:我想使用RAII作为可复制和可分配类的指针属性.
复制和赋值操作应该很深:每个对象都应该有自己的实际数据副本.此外,RTTI需要可用于属性(它们的类型也可以在运行时确定).
我应该搜索可复制智能指针的实现(数据很小,所以我不需要复制写入指针),或者我是否将复制操作委托给我的对象的复制构造函数,如本答案所示?
我可以选择哪种智能指针用于可复制和可分配的类的简单RAII?(我认为带有委托复制/赋值操作的unique_ptr到类复制构造函数和赋值运算符会做出正确的选择,但我不确定)
这是使用原始指针的问题的伪代码,它只是一个问题描述,而不是正在运行的C++代码:
// Operation interface
class ModelOperation
{
public:
virtual void operate = ();
};
// Implementation of an operation called Special
class SpecialModelOperation
:
public ModelOperation
{
private:
// Private attributes are present here in a real implementation.
public:
// Implement operation
void operate () {};
};
// All operations conform to ModelOperation interface
// These are possible operation names:
// class MoreSpecialOperation;
// …Run Code Online (Sandbox Code Playgroud)