小编Ash*_*can的帖子

警告:函数使用'auto'类型说明符而不使用尾随返回类型

以下代码给出了以下警告.有人可以解释一下原因(注意代码没有用,因为我用int替换了我的类型来制作一个完整的例子).

警告:' MaxEventSize()'函数使用' auto'类型说明符,不带尾随返回类型[默认启用]

我们的想法是获得特定结构的最大大小(类型去哪里int).

template<typename T>
constexpr T cexMax(T a, T b)
{
    return (a < b) ? b : a;
}

constexpr auto MaxEventSize()
{
    return cexMax(sizeof(int),
           cexMax(sizeof(int),
                    sizeof(int)));
};
Run Code Online (Sandbox Code Playgroud)

c++ return-type constexpr c++11 c++14

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

如何在CMake中设置ASAN_OPTIONS环境变量?

据我了解,要ASAN_OPTIONS与 clang 一起使用,ASAN_OPTIONS必须在编译之前设置环境变量。

如何在 CMake 脚本中执行此操作而不添加包装器脚本?

仅当使用 clang 编译时,我才需要禁用某个特定测试项目的 ODR 违规检查。所以在CMakeLists.txt文件中我有:

if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  # Clange reports ODR Violation errors in mbedtls/library/certs.c.  Need to disable this check.
  set(ENV{ASAN_OPTIONS} detect_odr_violation=0)
endif()
Run Code Online (Sandbox Code Playgroud)

但运行后cmake,如果我输入echo $ASAN_OPTIONS,则未设置。

运行后cmake,如果我输入:

export ASAN_OPTIONS=detect_odr_violation=0
make
Run Code Online (Sandbox Code Playgroud)

一切都很好。

是否可以cmake设置一个环境变量,以便它在cmake运行后仍然存在?抱歉我对环境的了解有限!

cmake address-sanitizer

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

C# - 如何防止引用类成员?

我有一个类(myClass)包含一个私有类成员(类型为myData的currentData).我有一个属性(CurrentData),允许"获取"该成员.我想允许用户调用currentData上的函数,但是阻止他们对它进行外部引用.例如.

myClass a = new myClass();

// This is OK
a.CurrentData.somefunc();

// This is what I dont want
myData m = new myData();
m = a.CurrentData;
// ... some time passes here...
m.someFunc();
Run Code Online (Sandbox Code Playgroud)

虽然我理解他们引用相同的对象.由于内部成员可能会意外更改,因此我不希望将我的课程之外的引用保留给内部成员.

这可能吗?我已经离开了c#这么久我不记得它是如何工作的!

c#

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

gcc如何决定隐含哪些库?

参考这个问题:

在一个小型微型嵌入式项目中,我发现我的编译代码大小远大于预期.事实证明这是因为我包含了使用assert()的代码.在包含的代码中使用assert是合适的,但导致我的编译代码大小几乎翻倍.

问题不在于if /何时应该使用assert,而是编译器/链接器如何决定包含assert的所有必要开销.

我在另一篇文章中的原始问题:

如果有人能够向我解释当调用assert时gcc如何决定包含库函数会有所帮助?我看到assert.h声明了一个外部函数__assert_func.链接器如何知道从库中引用它而不是仅仅说"未定义引用__asert_func"?

c c++ linker gcc stm32

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

您可以在多行字符串文字中使用C/C++预处理程序标记

扩展这个问题这个问题,是否可以使用显示的预处理器方法或包含预处理器符号值的C++多行字符串文字来获得多行字符串文字.例如:

#define SOME_CONSTANT 64

#define QUOTE(...) #__VA_ARGS__
const char * aString = QUOTE(
{
    "key":"fred",
    "value":"SOME_CONSTANT"
}
);
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望将"SOME_CONSTANT"替换为"64".

我尝试过使用我有限的技能组合中的所有技巧,包括字符串化并没有运气.

有任何想法吗?

c c++ c-preprocessor

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

C++传递对匿名结构的引用 - 可以吗?

使用下面显示的结构,我可以像这样使用它.

NMEADecodedSentence s;
auto & gga = s.GGA;
auto alt = gga.Alt;
Run Code Online (Sandbox Code Playgroud)

但是是否可以将对匿名结构的引用传递给函数,例如:

SomeFunc(gga);
Run Code Online (Sandbox Code Playgroud)

如果是这样,函数签名会是什么样的?我的想法是没有你不能没有命名结构,但我只是想知道是否有一些聪明的方式,我不知道!

struct NMEADecodedSentence
    {
        GNSSSentenceType Type;
        GNSSTalkerId TalkerId;
        union
        {
            struct
            {
                char Time[10];          // UTC time - hhmmss.ss
                char Lat[13];           // Latitude (degrees & minutes) - ddmm.mmmmm
                char NS;                // North/South indicator
                char Long[14];          // Longitude (degrees & minutes) - dddmm.mmmmm
                char EW;                // East/West indicator
                uint8_t Quality;        // Quality indicator for position fix
                uint8_t NumSV;          // Number of satellites used (0-12)
                float HDOP;             // …
Run Code Online (Sandbox Code Playgroud)

c++ structure anonymous

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