出于习惯,我经常为简单的函数内联函数定义,例如这个(人为的例子)
class PositiveInteger
{
private:
long long unsigned m_i;
public:
PositiveInteger (int i);
};
inline PositiveInteger :: PositiveInteger (int i)
: m_i (i)
{
if (i < 0)
throw "oops";
}
Run Code Online (Sandbox Code Playgroud)
我一般喜欢分离界面文件和实现文件,但是,这是我习惯于那些我脑子里的声音告诉我的热门可能会受到很多打击的功能.
我知道这个建议是"简介第一"并且我同意但是如果我事先知道编译器会生成相同的最终目标代码,无论是否在编译或链接时内联这些函数,我都可以避免一大堆分析工作.(另外,我相信注入的性能分析代码本身会导致时序的变化,从而影响非常简单的函数的效果,例如上面的那个.)
GCC 5.1刚刚发布了广告LTO(链接时间优化)的改进.他们真的有多好?知道最终可执行文件的哪些功能可以安全地内联不会受到影响?
我基本上有这段代码来拦截某些QTreeWidget事件。
MyWidget :: MyWidget ()
{
m_tree = new QTreeWidget ();
// ...
m_tree -> installEventFilter (this);
}
bool MyWidget :: eventFilter (QObject * obj, QEvent * e)
{
if (m_tree != obj)
return QWidget :: eventFilter (obj, e);
qDebug () << e -> type ();
switch (e -> type ())
{
case QEvent :: MouseButtonPress:
case QEvent :: MouseButtonRelease:
case QEvent :: MouseMove:
case QEvent :: Leave:
qDebug () << "GOT EM";
break;
};
// ...
} …Run Code Online (Sandbox Code Playgroud) 我正在开发需要良好安全性的网络应用。在本设计中,许多用户动作需要用户重新发送密码(否则服务器将不得不至少以临时文本形式将其存储为纯文本)。
很多用户交互都是通过AJAX请求进行的。我不想让用户为每个用户重新输入密码,而是要这样做:
var password_plain = document .getElementById ("password") .value;
ajax ("/login.php", {password: password_plain, username: ...});
// later
ajax ("/api.php", {password: password_plain, action: ...});
Run Code Online (Sandbox Code Playgroud)
例如,出于争论的目的,假设设计总体上是明智的
服务器不会存储或泄漏纯文本密码,
SSL已正确设置
password_plain=null会话是否过期(并清除DOM值)威胁模型是,攻击者无法物理访问客户端计算机或服务器计算机,并且不能在两者上运行任意代码,而是可以诱使用户在客户端浏览器中访问恶意的其他网页。
javascript变量中的密码安全吗?
我正在尝试制作兼容jQuery的复合HTML输入.
在此示例中,当select更改时,将alert调用两次.为什么?
给定一个简单的容器节点:
<span id="x"></span>
Run Code Online (Sandbox Code Playgroud)
这是一个完全有效的演示:
function el (type) {
return document .createElement (type);
}
function opt (sel, value) {
let node = el ('option');
node .value = value;
node .appendChild (document .createTextNode (value));
sel .appendChild (node);
}
let x = document .getElementById ('x');
let a = el ('select');
let b = el ('select');
x .appendChild (a);
x .appendChild (b);
opt (a, 'a_1');
opt (a, 'a_2');
opt (b, 'b_1');
opt (b, 'b_2'); …Run Code Online (Sandbox Code Playgroud) 这是我刚才在野外写的内容的简要说明.我并不是真的希望它可以工作,但确实如此.
#include <array>
template <typename T> using Foo = std::array<T,123>;
const int FOO_SIZE = std::tuple_size<Foo<void>>::value;
Run Code Online (Sandbox Code Playgroud)
我不确定使用voidspecialize Foo会编译,但它确实如此,至少在这种情况下.
我不相信这个解决方案是可移植的,或者它只是一个侥幸,因为实现std::array 恰好与空洞阵列的概念兼容,这对我来说听起来像是无稽之谈.
我什么时候可以,何时可以使用void专门化模板?
考虑:
struct A {
A (int);
A (const A &);
};
struct B {
A foo [2];
B (const A & x, const A & y)
: foo {x, y} /* HERE IS THE PROBLEM */
{}
};
Run Code Online (Sandbox Code Playgroud)
我期待这个工作,因为我在GCC4.3中使用C++ 0x支持,据称支持初始化列表.没有快乐.
我有一个没有默认构造函数的类A. 这是不容谈判的.分配后默认不是一个选项.
我正在尝试创建使用A的B.B :: foo可能不是std :: vector.
我怎么能初始化B::foo中B(...),构建它的元素恰好一次?
目前,我正在考虑用B替换B.
struct B {
A foo_a;
B foo_b;
A * foo () {
assert ((&foo_b) - *&foo_a) == 1);
return &foo_a;
}
B (const A & x, const …Run Code Online (Sandbox Code Playgroud) 我需要验证我能以某种方式使用工会.
对于C99,这个答案是足够的:联盟元素对齐
C99 - 第6.7.2.1节结构和联盟说明者(第14段):
指向联合对象的指针(适当转换)指向其每个成员(或者如果成员是位域,则指向它所在的单位),反之亦然.
有人可以帮我找到C++的等效保证吗?
更一般地说,是否有一个很好的资源来查找C++标准的段落/段落引用,这些标准等同于C中的已知功能?
非常感谢.
我知道sizeof...(Args...)在C++ 0x压缩模板参数列表中产生了类型的数量,但是我想根据其他功能实现它以用于演示目的,但它不会编译.
// This is not a solution -- overload ambiguity.
// template <typename... Args> size_t num_args (); // Line 7
// template <>
constexpr size_t num_args ()
{
return 0;
}
template <typename H, typename... T>
constexpr size_t num_args () // Line 16
{
return 1 + num_args <T...> (); // *HERE*
}
int main ()
{
std :: cout << num_args <int, int, int> ();
}
Run Code Online (Sandbox Code Playgroud)
这个错误*HERE*与
No matching function call to ...
... …Run Code Online (Sandbox Code Playgroud) 建议您始终抛出从中派生的东西,std::exception并且有一些预定义的特化,例如std::runtime_error
std::exception的界面是根据非投掷访问器给出的.大.现在看一下构造函数std::runtime_error
class runtime_error : public exception {
public:
explicit runtime_error (const string &);
};
Run Code Online (Sandbox Code Playgroud)
所以,如果我做这
try {
foo ();
}
catch (...) {
throw std :: runtime_error ("bang");
}
Run Code Online (Sandbox Code Playgroud)
完全有可能foo抛出因为内存不足,在这种情况下构造string参数runtime_error也可以抛出.这将是一个throw-expression,它本身也会抛出:这不会叫std::terminate吗?
这是不是意味着我们应该总是这样做:
namespace {
const std :: string BANG ("bang");
}
...
try {
foo ();
}
catch (...) {
throw std :: runtime_error (BANG);
}
Run Code Online (Sandbox Code Playgroud)
但等等,这也行不通,是吗?因为runtime_error要复制它的论点,这也可能会引发......
...所以这是不是意味着没有安全的方法来使用标准的特化std::exception,并且你应该总是滚动你自己的字符串类,其构造函数只会失败而不抛出?
还是有一些我不知道的伎俩?
QPolygonF具有与其他 QPolygonF 并集、相交和相减的方法,但我需要与 QLineF 执行相交测试。API 中似乎缺少此功能。
我想我可以做这样的事情:
if (polygon .containsPoint (line .p1 ()) != polygon .containsPoint (line .p2 ())
return true;
QPointF a = polygon .back ();
foreach (QPointF b, polygon)
{
if (QLineF :: BoundedIntersection == line .intersect (QPointF (a, b))
return true;
a = b;
}
return false;
Run Code Online (Sandbox Code Playgroud)
上面可能隐藏着一些数字或边缘情况的惊喜,所以我宁愿不这样做。
Qt API 中是否有我看不到的提供的方法?
c++ ×7
constructor ×2
javascript ×2
qt ×2
arrays ×1
c ×1
c++11 ×1
c99 ×1
constexpr ×1
default ×1
exception ×1
gcc ×1
jquery ×1
qmouseevent ×1
qt-events ×1
qtreewidget ×1
security ×1
standards ×1
std ×1
templates ×1