Создание временного объекта

Кто-нибудь знает, можно ли включить любой вид ведения журнала на любом компиляторе, совместимом с С++ (Visual Studios, g++ и т. д.), чтобы я мог обнаруживать, когда создаются временные объекты?

Например:

Допустим, у меня есть функция f(char x), но я вызываю ее с помощью f(46)

увижу в логах -

temporary char created promoting int @ function param f(46) (или что-то в этом роде)

Я прочитал параметры переключения компилятора VS, и кажется, что это не вариант.

Я понимаю, что в новом стандарте есть концепция rvalue reference (&&), которую можно использовать для обнаружения большинства временных объектов для семантики перемещения, но это требует добавления нового кода/совместимого компилятора.

Так можно ли это сделать? Или это привилегированное знание компилятора?


person Community    schedule 22.10.2012    source источник
comment
Даже короткие фрагменты кода могут генерировать ТОННЫ копий и временных файлов. Это было бы менее полезно, чем вы думаете.   -  person Mooing Duck    schedule 23.10.2012
comment
46 — это совершенно допустимое значение char, и передача его по значению в функцию — правильное решение. Вы уверены, что не прочитали какую-нибудь статью FUD от хардкорного программиста на C?   -  person Bo Persson    schedule 23.10.2012
comment
извините за очень поздний ответ - я знаю, что это будет генерировать огромное количество данных, но это было бы полезно. В любом случае, я понимаю, что на данном этапе это невозможно сделать, поэтому я мог бы заняться этим сам. В любом случае спасибо за помощь.   -  person    schedule 20.11.2012
comment
@ Бо, да, это было неправильно, я должен был ввести f(const char& x)   -  person    schedule 20.11.2012


Ответы (1)


Что было бы более полезным, так это встроенные аннотации в IDE (поскольку я предполагаю, что вы хотите оптимизировать, минимизировав некоторые из этих временных параметров?). На практике самым простым способом было бы изменить GCC или g++ и заставить их общаться с плагином Visual Studio или чем-то еще. Они могли аннотировать распределение регистров и все такое. Вау, это было бы действительно полезно.

За исключением подобных попыток, а я не знаю ни одной, лучший способ — просто научиться читать сборку. В Visual Studio вы можете сделать скомпилированную сборку встроенной в исходный код, что очень полезно.

person Jarrod Smith    schedule 25.10.2012